Compare commits
53 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 44d01ecc20 | |||
| e43e187d84 | |||
| 849170cd2b | |||
| d36b07cbd4 | |||
| ceeb999b7f | |||
| 51c4e15c57 | |||
| 67b266ae0e | |||
| 6f2866a202 | |||
| dfa6e960da | |||
| ff2f6e1e5a | |||
| c10000df53 | |||
| 6e6f1bed17 | |||
| c77a31e322 | |||
| 47db205135 | |||
| 5ab30c139f | |||
| 852e950428 | |||
| e882a83694 | |||
| 0d26e641d7 | |||
| 4c6a07c9d0 | |||
| fe38921f23 | |||
| 118991feea | |||
| a87750f380 | |||
| cb8ee2cb67 | |||
| 787cd8b4e7 | |||
| 64ec53e6f8 | |||
| 2df5342da2 | |||
| d8fdba5e4f | |||
| a05e186275 | |||
| 7730da5faa | |||
| 9844dc9ac2 | |||
| a9f16bca4a | |||
| 5612768d7f | |||
| ad1487afdf | |||
| f707186dea | |||
| 24f63c7d4b | |||
| 9678040d51 | |||
| 27dc1d8ff5 | |||
| 4a0fe9ed09 | |||
| b382b70aa9 | |||
| 024a7c6333 | |||
| c9b4ef1aa5 | |||
| f30ab9e009 | |||
| e15b7bcca2 | |||
| 90426c21f1 | |||
| 2ab07b7010 | |||
| be8fd7f4b5 | |||
| 4bf972747f | |||
| 96567c19f5 | |||
| 82d5bd6b0d | |||
| 889dd5e179 | |||
| bd8aba6992 | |||
| 017af0ed8e | |||
| 4f4d8dac52 |
@@ -1,5 +1,54 @@
|
||||
# Changelog
|
||||
|
||||
## Versione 3.3.2
|
||||
|
||||
### Build (58)
|
||||
- Corretto spazio banner sempre visibile
|
||||
|
||||
### Build (57)
|
||||
- Corretto layout conteggio
|
||||
|
||||
### Build (56)
|
||||
- Corretto crash in configurazione iniziale
|
||||
- Corretta distanza in allerta tempo reale
|
||||
- Aggiunto conto alla rovescia in allerta tempo reale in home
|
||||
|
||||
## Versione 3.3.1
|
||||
|
||||
### Build (54)
|
||||
- Corretto problema user-id non ricavato
|
||||
|
||||
## Versione 3.3
|
||||
|
||||
### Build (52)
|
||||
- Aggiunta gestione in caso di fallita registrazione iniziale al server
|
||||
|
||||
### Build (51)
|
||||
- Utilizzati adaptive e native banner
|
||||
- Aggiornate dipendenze
|
||||
- Rimosso codice non utilizzato
|
||||
|
||||
## Versione 3.2.1
|
||||
|
||||
### Build (50)
|
||||
- Aggiunta chiamata per registrazione acquisto
|
||||
- Rivisto modell EQNReteSmartphone
|
||||
|
||||
### Build (49)
|
||||
- Aggiunta indicazione prodotto ripristinato
|
||||
- Aggiunto messaggio se nessun prodotto da ripristinare
|
||||
|
||||
## Versione 3.2.0
|
||||
|
||||
### Build (48)
|
||||
- Rimosse stringhe non utilizzate
|
||||
- Aggiunto bottone per aprire pagina abbonamenti
|
||||
|
||||
### Build (47)
|
||||
- Corretto problema layout in home
|
||||
- Aggiunta funzione simulatore
|
||||
- Rimosse stringhe non utilizzate e aggiornate traduzioni mancanti
|
||||
|
||||
## Versione 3.1.0
|
||||
|
||||
### Build (46)
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
//
|
||||
|
||||
#import "NotificationViewController.h"
|
||||
#import "PastquakesAnnotation.h"
|
||||
#import "ReteSismicaAnnotation.h"
|
||||
#import "EQNMapAnnotationPastquakes.h"
|
||||
#import "EQNMapAnnotationSeismicNetwork.h"
|
||||
#import "EQNUtility.h"
|
||||
|
||||
@import UserNotifications;
|
||||
@@ -61,20 +61,20 @@
|
||||
[self.mapView setRegion:region animated:YES];
|
||||
|
||||
if ([userInfo[@"type"] isEqualToString:@"eqn"]) {
|
||||
PastquakesAnnotation *annotation = [[PastquakesAnnotation alloc] initWithTitle:content.body
|
||||
EQNMapAnnotationPastquakes *annotation = [[EQNMapAnnotationPastquakes alloc] initWithTitle:content.body
|
||||
location:coordinate.coordinate
|
||||
intensita:[userInfo[@"intensity"] intValue]];
|
||||
[self.mapView addAnnotation:annotation];
|
||||
|
||||
} else if ([userInfo[@"type"] isEqualToString:@"manual"]){
|
||||
ReteSismicaAnnotation *annotation = [[ReteSismicaAnnotation alloc] initWithTitle:content.body
|
||||
EQNMapAnnotationSeismicNetwork *annotation = [[EQNMapAnnotationSeismicNetwork alloc] initWithTitle:content.body
|
||||
location:coordinate.coordinate
|
||||
magnitudo:[userInfo[@"magnitudo"] intValue]];
|
||||
[self.mapView addAnnotation:annotation];
|
||||
}
|
||||
|
||||
|
||||
self.userSeismicTimestamp = [self calculateUserSeismicTimestampWithInfo:userInfo];
|
||||
self.userSeismicTimestamp = [EQNUtility calculateUserSeismicTimestampFromUserInfo:userInfo];
|
||||
if (self.userSeismicTimestamp) {
|
||||
// start the countdown
|
||||
self.countdownTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
|
||||
@@ -88,39 +88,6 @@
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (nullable NSDate *)calculateUserSeismicTimestampWithInfo:(NSDictionary *)info
|
||||
{
|
||||
// dobbiamo calcolare l'ora in cui il sisma arriverà nella posizione dell'utente
|
||||
// per fare questo, il calcolo sarà:
|
||||
// timestamp sisma + warning time
|
||||
|
||||
// ultima posizione nota dell'utente
|
||||
CLLocationManager *manager = [[CLLocationManager alloc] init];
|
||||
CLLocation *lastUserLocation = manager.location;
|
||||
if (!lastUserLocation) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
// posizione sisma
|
||||
double latitude = [info[@"latitude"] doubleValue];
|
||||
double longitude = [info[@"longitude"] doubleValue];
|
||||
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
|
||||
|
||||
// distanza tra sisma e utente (in km)
|
||||
CLLocationDistance distance = [lastUserLocation distanceFromLocation:location];
|
||||
double userDistance = distance/1000;
|
||||
|
||||
// calcoliamo warning_time
|
||||
double waveSpeed = [info[@"wave_speed"] doubleValue];
|
||||
double warningTime = round(userDistance/waveSpeed - 5);
|
||||
|
||||
// aggiungiamo il warning time al timestamp del sisma
|
||||
NSDate *seismicDate = [EQNUtility getDateFromString:info[@"datetime"]];
|
||||
NSDate *userSeismicDate = [seismicDate dateByAddingTimeInterval:warningTime];
|
||||
|
||||
return userSeismicDate;
|
||||
}
|
||||
|
||||
- (void)countdownFired:(id)sender
|
||||
{
|
||||
NSDate *now = [NSDate date];
|
||||
@@ -139,9 +106,9 @@
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
|
||||
{
|
||||
if ([annotation isKindOfClass:[PastquakesAnnotation class]]) {
|
||||
PastquakesAnnotation *anLocation = (PastquakesAnnotation *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_PASTQUAKES];
|
||||
if ([annotation isKindOfClass:[EQNMapAnnotationPastquakes class]]) {
|
||||
EQNMapAnnotationPastquakes *anLocation = (EQNMapAnnotationPastquakes *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:EQNMapAnnotationPastquakesIdentifier];
|
||||
if (annotationView == nil) {
|
||||
annotationView = anLocation.annotationView;
|
||||
} else {
|
||||
@@ -149,9 +116,9 @@
|
||||
}
|
||||
return annotationView;
|
||||
|
||||
} else if ([annotation isKindOfClass:[ReteSismicaAnnotation class]]) {
|
||||
ReteSismicaAnnotation *anLocation = (ReteSismicaAnnotation *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_RETESMARTPHONE];
|
||||
} else if ([annotation isKindOfClass:[EQNMapAnnotationSeismicNetwork class]]) {
|
||||
EQNMapAnnotationSeismicNetwork *anLocation = (EQNMapAnnotationSeismicNetwork *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:EQNMapAnnotationSeismicNetworkIdentifier];
|
||||
if (annotationView == nil) {
|
||||
annotationView = anLocation.annotationView;
|
||||
} else {
|
||||
|
||||
@@ -7,18 +7,20 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
6525A82625E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */; };
|
||||
65DBFB4B25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 65DBFB4A25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift */; };
|
||||
65DBFB5F25E2A5010041CBA6 /* EQNMapAnnotationPastquakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m */; };
|
||||
65DBFB7425E2BBF20041CBA6 /* GADTMediumTemplateView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 65DBFB6F25E2BBF20041CBA6 /* GADTMediumTemplateView.xib */; };
|
||||
65DBFB7525E2BBF20041CBA6 /* GADTMediumTemplateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DBFB7125E2BBF20041CBA6 /* GADTMediumTemplateView.m */; };
|
||||
65DBFB7625E2BBF20041CBA6 /* GADTTemplateView.m in Sources */ = {isa = PBXBuildFile; fileRef = 65DBFB7225E2BBF20041CBA6 /* GADTTemplateView.m */; };
|
||||
8C10B0B92281FE7F00125C9F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C10B0BD2281FE7F00125C9F /* Localizable.strings */; };
|
||||
8C10B0BA2281FE7F00125C9F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C10B0BD2281FE7F00125C9F /* Localizable.strings */; };
|
||||
8C10B0BB2281FE7F00125C9F /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C10B0BD2281FE7F00125C9F /* Localizable.strings */; };
|
||||
8C14113121ED3E5B00A59729 /* SettingsRealTimeAlertsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C14113021ED3E5B00A59729 /* SettingsRealTimeAlertsViewController.m */; };
|
||||
8C14113721EE502800A59729 /* EQNAllertaSismica.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C14113621EE502800A59729 /* EQNAllertaSismica.m */; };
|
||||
8C2B251121938BFD00E0E25E /* SegnalazioniUtenteDettagliMappa.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B251021938BFD00E0E25E /* SegnalazioniUtenteDettagliMappa.m */; };
|
||||
8C2B25142193927E00E0E25E /* ReteSismiDettagliMappa.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C2B25132193927E00E0E25E /* ReteSismiDettagliMappa.m */; };
|
||||
8C465D9A21F653AB00F04673 /* Assets.xcassets in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CBD3DD12149B9AD0070C963 /* Assets.xcassets */; };
|
||||
8C465D9B21F653CA00F04673 /* Assets.xcassets in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CBD3DD12149B9AD0070C963 /* Assets.xcassets */; };
|
||||
8C465D9C21F7BBE700F04673 /* PastquakesAnnotation.m in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* PastquakesAnnotation.m */; };
|
||||
8C465D9D21F7BBE700F04673 /* PastquakesAnnotation.h in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C602248218EDBE200C799C2 /* PastquakesAnnotation.h */; };
|
||||
8C465D9E21F7BD8700F04673 /* PastquakesAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* PastquakesAnnotation.m */; };
|
||||
8C465D9F21F7BE0600F04673 /* Assets.xcassets in Sources */ = {isa = PBXBuildFile; fileRef = 8CBD3DD12149B9AD0070C963 /* Assets.xcassets */; };
|
||||
8C483CAE21FDA53B00259FD2 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C483CAD21FDA53B00259FD2 /* StoreKit.framework */; };
|
||||
8C483CB821FDACD300259FD2 /* IAPHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C483CB721FDACD300259FD2 /* IAPHelper.swift */; };
|
||||
@@ -28,20 +30,20 @@
|
||||
8C4DD4F9228237E000AE77ED /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8C4DD4FB228237E000AE77ED /* InfoPlist.strings */; };
|
||||
8C4E343F215012FA008B0D2A /* EQNManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E343E215012FA008B0D2A /* EQNManager.m */; };
|
||||
8C4E34422152B5E8008B0D2A /* EQNRilevamento.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E34412152B5E8008B0D2A /* EQNRilevamento.m */; };
|
||||
8C4E34452152B707008B0D2A /* EQMAccelerometroManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E34442152B707008B0D2A /* EQMAccelerometroManager.m */; };
|
||||
8C4E34452152B707008B0D2A /* EQNAccelerometroManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E34442152B707008B0D2A /* EQNAccelerometroManager.m */; };
|
||||
8C4E344B2152EE5B008B0D2A /* EQNGeneratoreURLServer.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C4E344A2152EE5B008B0D2A /* EQNGeneratoreURLServer.m */; };
|
||||
8C593E8A217BA2470008B260 /* EQNSegnalazione.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C593E89217BA2470008B260 /* EQNSegnalazione.m */; };
|
||||
8C5EA22D21763103002DC156 /* MapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C5EA22C21763102002DC156 /* MapKit.framework */; };
|
||||
8C5EA23D2177B51C002DC156 /* SegnalazioniViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C5EA23C2177B51C002DC156 /* SegnalazioniViewController.m */; };
|
||||
8C602246218D9DB200C799C2 /* PastquakesDettagliMappa.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602245218D9DB200C799C2 /* PastquakesDettagliMappa.m */; };
|
||||
8C60224A218EDBE200C799C2 /* PastquakesAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* PastquakesAnnotation.m */; };
|
||||
8C60224A218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C602249218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m */; };
|
||||
8C6CBAE521597E79005C426A /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8C6CBAE421597E79005C426A /* GoogleService-Info.plist */; };
|
||||
8C7A3B66225A5EA40045B266 /* NSDictionary+EQNExtensions.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C7A3B64225A5EA30045B266 /* NSDictionary+EQNExtensions.m */; };
|
||||
8C7CD64821F7D0F800835812 /* ReteSismicaAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* ReteSismicaAnnotation.m */; };
|
||||
8C7CD64921F7D11700835812 /* ReteSismicaAnnotation.m in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* ReteSismicaAnnotation.m */; };
|
||||
8C7CD64A21F7D11700835812 /* ReteSismicaAnnotation.h in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CD08636218B3BEE0000CB5E /* ReteSismicaAnnotation.h */; };
|
||||
8C7CD64821F7D0F800835812 /* EQNMapAnnotationSeismicNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m */; };
|
||||
8C7CD64921F7D11700835812 /* EQNMapAnnotationSeismicNetwork.m in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m */; };
|
||||
8C7CD64A21F7D11700835812 /* EQNMapAnnotationSeismicNetwork.h in Frameworks */ = {isa = PBXBuildFile; fileRef = 8CD08636218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.h */; };
|
||||
8C8EBBA721540039002784BA /* EQNUser.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C8EBBA621540039002784BA /* EQNUser.m */; };
|
||||
8CA46BA12194532E00C63C16 /* SismaAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CA46BA02194532E00C63C16 /* SismaAnnotation.m */; };
|
||||
8CA46BA12194532E00C63C16 /* EQNMapAnnotationSeismic.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CA46BA02194532E00C63C16 /* EQNMapAnnotationSeismic.m */; };
|
||||
8CADAA9421B2627D0044E256 /* LogViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CADAA9321B2627D0044E256 /* LogViewController.m */; };
|
||||
8CAFD7C521825E4A00F8BD29 /* EQNSisma.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CAFD7C421825E4A00F8BD29 /* EQNSisma.m */; };
|
||||
8CBD3DC72149B9AD0070C963 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CBD3DC62149B9AD0070C963 /* AppDelegate.m */; };
|
||||
@@ -56,7 +58,7 @@
|
||||
8CCE165121E7BAEC00173CD9 /* EQNNotificheReteSismiche.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCE165021E7BAEC00173CD9 /* EQNNotificheReteSismiche.m */; };
|
||||
8CCE165521EA378800173CD9 /* SettingsUserReportAlertsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCE165421EA378800173CD9 /* SettingsUserReportAlertsViewController.m */; };
|
||||
8CCE165821EB1E0000173CD9 /* SettingsSeismicNetworkAlertsViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CCE165721EB1E0000173CD9 /* SettingsSeismicNetworkAlertsViewController.m */; };
|
||||
8CD08638218B3BEE0000CB5E /* ReteSismicaAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* ReteSismicaAnnotation.m */; };
|
||||
8CD08638218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CD08637218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m */; };
|
||||
8CF05B51218C41FB0055012B /* PickerViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF05B4B218C41F90055012B /* PickerViewController.m */; };
|
||||
8CF05B53218C41FB0055012B /* PickerViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 8CF05B4F218C41FA0055012B /* PickerViewController.xib */; };
|
||||
8CF05B57218C93BA0055012B /* EQNUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF05B56218C93BA0055012B /* EQNUtility.m */; };
|
||||
@@ -65,7 +67,6 @@
|
||||
8CF12CD921DE49B600613AC5 /* NotificationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF12CD821DE49B600613AC5 /* NotificationViewController.m */; };
|
||||
8CF12CDC21DE49B600613AC5 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 8CF12CDA21DE49B600613AC5 /* MainInterface.storyboard */; };
|
||||
8CF12CE021DE49B600613AC5 /* EQNNotificationContent.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 8CF12CD121DE49B600613AC5 /* EQNNotificationContent.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
8CF4F4D2216D2C780057110B /* EQNReteSmartphone.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF4F4D1216D2C780057110B /* EQNReteSmartphone.m */; };
|
||||
8CF4F4D8216D3A110057110B /* EQNAreaCheck.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF4F4D7216D3A110057110B /* EQNAreaCheck.m */; };
|
||||
8CF4F4DB216D44930057110B /* EQNPastquakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF4F4DA216D44930057110B /* EQNPastquakes.m */; };
|
||||
8CF6604F214C0E58009F4314 /* EQNCalibrazione.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF6604E214C0E58009F4314 /* EQNCalibrazione.m */; };
|
||||
@@ -76,7 +77,6 @@
|
||||
DC03BEAB250BC0A60084769B /* EQNRoundedButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC03BEAA250BC0A60084769B /* EQNRoundedButton.swift */; };
|
||||
DC08803F24F5A89000186D97 /* SettingEnableTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC08803E24F5A89000186D97 /* SettingEnableTableViewCell.swift */; };
|
||||
DC08804124F5B41400186D97 /* SettingSliderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC08804024F5B41400186D97 /* SettingSliderTableViewCell.swift */; };
|
||||
DC0AE1A325381D4100111307 /* EQNAdsUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = DC0AE1A225381D4100111307 /* EQNAdsUtility.m */; };
|
||||
DC0AE1B52538202300111307 /* EQNUtility.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF05B56218C93BA0055012B /* EQNUtility.m */; };
|
||||
DC0AE1B92538204100111307 /* EQNSegnalazione.m in Sources */ = {isa = PBXBuildFile; fileRef = 8C593E89217BA2470008B260 /* EQNSegnalazione.m */; };
|
||||
DC0AE1BA2538204100111307 /* EQNPastquakes.m in Sources */ = {isa = PBXBuildFile; fileRef = 8CF4F4DA216D44930057110B /* EQNPastquakes.m */; };
|
||||
@@ -86,12 +86,14 @@
|
||||
DC2814302519C24400C1AFF7 /* SeismicNetworkTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC28142F2519C24400C1AFF7 /* SeismicNetworkTableViewCell.swift */; };
|
||||
DC2814382519C56100C1AFF7 /* SeismicNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC2814372519C56100C1AFF7 /* SeismicNetworksViewController.swift */; };
|
||||
DC30BC882534DBBD0041B23B /* star_white1.png in Resources */ = {isa = PBXBuildFile; fileRef = DC30BC872534DBBD0041B23B /* star_white1.png */; };
|
||||
DC3B5429257FCBCA00C0B6A5 /* EQNReteSmartphone.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3B5428257FCBCA00C0B6A5 /* EQNReteSmartphone.swift */; };
|
||||
DC3BA11124D1A9C90062EE7F /* SubscriptionsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3BA11024D1A9C90062EE7F /* SubscriptionsViewController.swift */; };
|
||||
DC3CE50A250EB7A8005A7DD5 /* EQNGenericPickerViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC3CE509250EB7A8005A7DD5 /* EQNGenericPickerViewController.swift */; };
|
||||
DC47D1BC252A0C2B004119F6 /* AlertsPastEartquakesTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC47D1BB252A0C2B004119F6 /* AlertsPastEartquakesTableViewCell.swift */; };
|
||||
DC4B67612517833F00634277 /* EQNSeismic.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC4B67602517833F00634277 /* EQNSeismic.swift */; };
|
||||
DC52B8A224FC145500ABEBA6 /* SettingsBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = DC52B8A124FC145500ABEBA6 /* SettingsBaseViewController.m */; };
|
||||
DC52B8A524FCCD6900ABEBA6 /* AppTheme.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC52B8A424FCCD6900ABEBA6 /* AppTheme.swift */; };
|
||||
DC553AF625692E37000B521B /* StoryboardInitializable.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC553AF525692E37000B521B /* StoryboardInitializable.swift */; };
|
||||
DC646F27252B694A000AA5FD /* AlertsSeismicNotificationExpandedTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC646F26252B694A000AA5FD /* AlertsSeismicNotificationExpandedTableViewCell.swift */; };
|
||||
DC646F32252B698B000AA5FD /* AlertsSeismicNotificationCompactTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC646F31252B698B000AA5FD /* AlertsSeismicNotificationCompactTableViewCell.swift */; };
|
||||
DC65B391250F243E00251693 /* SeismicSettingsNetworksViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DC65B390250F243E00251693 /* SeismicSettingsNetworksViewController.swift */; };
|
||||
@@ -209,6 +211,7 @@
|
||||
DCAA913F24F68A1D00145A3D /* SettingMultivaluesTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCAA913E24F68A1D00145A3D /* SettingMultivaluesTableViewCell.swift */; };
|
||||
DCB28CEE24FB8400001F557E /* SettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB28CED24FB8400001F557E /* SettingsViewController.swift */; };
|
||||
DCB45BC8250E86E100DB2D0C /* SeismicSettingsViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB45BC7250E86E100DB2D0C /* SeismicSettingsViewController.swift */; };
|
||||
DCB528212560161C005288E5 /* AlertSimulatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCB528202560161C005288E5 /* AlertSimulatorViewController.swift */; };
|
||||
DCB6FBEC24D0B40600ED23B8 /* Colors.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DCB6FBEB24D0B40600ED23B8 /* Colors.xcassets */; };
|
||||
DCBB267A24D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267924D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift */; };
|
||||
DCBB267C24D1E98300F04559 /* EQNInsetTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */; };
|
||||
@@ -270,6 +273,13 @@
|
||||
/* Begin PBXFileReference section */
|
||||
25A8BFFE29D46740E8A8A7A3 /* Pods_Earthquake_Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Earthquake_Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
40CD2E5581CF2FA3D52F392D /* Pods-Earthquake Network.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Earthquake Network.release.xcconfig"; path = "Pods/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network.release.xcconfig"; sourceTree = "<group>"; };
|
||||
6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworkAdvertiseTableViewCell.swift; sourceTree = "<group>"; };
|
||||
65DBFB4A25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworksMapDetailViewController.swift; sourceTree = "<group>"; };
|
||||
65DBFB6F25E2BBF20041CBA6 /* GADTMediumTemplateView.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = GADTMediumTemplateView.xib; sourceTree = "<group>"; };
|
||||
65DBFB7025E2BBF20041CBA6 /* GADTTemplateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADTTemplateView.h; sourceTree = "<group>"; };
|
||||
65DBFB7125E2BBF20041CBA6 /* GADTMediumTemplateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GADTMediumTemplateView.m; sourceTree = "<group>"; };
|
||||
65DBFB7225E2BBF20041CBA6 /* GADTTemplateView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GADTTemplateView.m; sourceTree = "<group>"; };
|
||||
65DBFB7325E2BBF20041CBA6 /* GADTMediumTemplateView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GADTMediumTemplateView.h; sourceTree = "<group>"; };
|
||||
8C10B0AF2281FBE800125C9F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Main.strings; sourceTree = "<group>"; };
|
||||
8C10B0B02281FBE800125C9F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/LaunchScreen.strings; sourceTree = "<group>"; };
|
||||
8C10B0B12281FBE800125C9F /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/MainInterface.strings; sourceTree = "<group>"; };
|
||||
@@ -286,8 +296,6 @@
|
||||
8C14113621EE502800A59729 /* EQNAllertaSismica.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNAllertaSismica.m; sourceTree = "<group>"; };
|
||||
8C2B250F21938BFD00E0E25E /* SegnalazioniUtenteDettagliMappa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SegnalazioniUtenteDettagliMappa.h; sourceTree = "<group>"; };
|
||||
8C2B251021938BFD00E0E25E /* SegnalazioniUtenteDettagliMappa.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SegnalazioniUtenteDettagliMappa.m; sourceTree = "<group>"; };
|
||||
8C2B25122193927E00E0E25E /* ReteSismiDettagliMappa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReteSismiDettagliMappa.h; sourceTree = "<group>"; };
|
||||
8C2B25132193927E00E0E25E /* ReteSismiDettagliMappa.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReteSismiDettagliMappa.m; sourceTree = "<group>"; };
|
||||
8C465D9721F6539700F04673 /* Earthquake Network.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = "Earthquake Network.xcodeproj"; sourceTree = "<group>"; };
|
||||
8C483CAD21FDA53B00259FD2 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; };
|
||||
8C483CB021FDA8C700259FD2 /* Earthquake Network-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Earthquake Network-Bridging-Header.h"; sourceTree = "<group>"; };
|
||||
@@ -306,8 +314,8 @@
|
||||
8C4E343E215012FA008B0D2A /* EQNManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNManager.m; sourceTree = "<group>"; };
|
||||
8C4E34402152B5E8008B0D2A /* EQNRilevamento.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNRilevamento.h; sourceTree = "<group>"; };
|
||||
8C4E34412152B5E8008B0D2A /* EQNRilevamento.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNRilevamento.m; sourceTree = "<group>"; };
|
||||
8C4E34432152B707008B0D2A /* EQMAccelerometroManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQMAccelerometroManager.h; sourceTree = "<group>"; };
|
||||
8C4E34442152B707008B0D2A /* EQMAccelerometroManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQMAccelerometroManager.m; sourceTree = "<group>"; };
|
||||
8C4E34432152B707008B0D2A /* EQNAccelerometroManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNAccelerometroManager.h; sourceTree = "<group>"; };
|
||||
8C4E34442152B707008B0D2A /* EQNAccelerometroManager.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNAccelerometroManager.m; sourceTree = "<group>"; };
|
||||
8C4E34492152EE5B008B0D2A /* EQNGeneratoreURLServer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNGeneratoreURLServer.h; sourceTree = "<group>"; };
|
||||
8C4E344A2152EE5B008B0D2A /* EQNGeneratoreURLServer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNGeneratoreURLServer.m; sourceTree = "<group>"; };
|
||||
8C593E88217BA2470008B260 /* EQNSegnalazione.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNSegnalazione.h; sourceTree = "<group>"; };
|
||||
@@ -317,15 +325,15 @@
|
||||
8C5EA23C2177B51C002DC156 /* SegnalazioniViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SegnalazioniViewController.m; sourceTree = "<group>"; };
|
||||
8C602244218D9DB200C799C2 /* PastquakesDettagliMappa.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PastquakesDettagliMappa.h; sourceTree = "<group>"; };
|
||||
8C602245218D9DB200C799C2 /* PastquakesDettagliMappa.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PastquakesDettagliMappa.m; sourceTree = "<group>"; };
|
||||
8C602248218EDBE200C799C2 /* PastquakesAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PastquakesAnnotation.h; sourceTree = "<group>"; };
|
||||
8C602249218EDBE200C799C2 /* PastquakesAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PastquakesAnnotation.m; sourceTree = "<group>"; };
|
||||
8C602248218EDBE200C799C2 /* EQNMapAnnotationPastquakes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNMapAnnotationPastquakes.h; sourceTree = "<group>"; };
|
||||
8C602249218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNMapAnnotationPastquakes.m; sourceTree = "<group>"; };
|
||||
8C6CBAE421597E79005C426A /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
|
||||
8C7A3B64225A5EA30045B266 /* NSDictionary+EQNExtensions.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSDictionary+EQNExtensions.m"; sourceTree = "<group>"; };
|
||||
8C7A3B65225A5EA40045B266 /* NSDictionary+EQNExtensions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSDictionary+EQNExtensions.h"; sourceTree = "<group>"; };
|
||||
8C8EBBA521540039002784BA /* EQNUser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNUser.h; sourceTree = "<group>"; };
|
||||
8C8EBBA621540039002784BA /* EQNUser.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNUser.m; sourceTree = "<group>"; };
|
||||
8CA46B9F2194532E00C63C16 /* SismaAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SismaAnnotation.h; sourceTree = "<group>"; };
|
||||
8CA46BA02194532E00C63C16 /* SismaAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SismaAnnotation.m; sourceTree = "<group>"; };
|
||||
8CA46B9F2194532E00C63C16 /* EQNMapAnnotationSeismic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNMapAnnotationSeismic.h; sourceTree = "<group>"; };
|
||||
8CA46BA02194532E00C63C16 /* EQNMapAnnotationSeismic.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNMapAnnotationSeismic.m; sourceTree = "<group>"; };
|
||||
8CADAA9221B2627D0044E256 /* LogViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LogViewController.h; sourceTree = "<group>"; };
|
||||
8CADAA9321B2627D0044E256 /* LogViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = LogViewController.m; sourceTree = "<group>"; };
|
||||
8CAFD7C321825E4A00F8BD29 /* EQNSisma.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNSisma.h; sourceTree = "<group>"; };
|
||||
@@ -351,8 +359,8 @@
|
||||
8CCE165421EA378800173CD9 /* SettingsUserReportAlertsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsUserReportAlertsViewController.m; sourceTree = "<group>"; };
|
||||
8CCE165621EB1E0000173CD9 /* SettingsSeismicNetworkAlertsViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsSeismicNetworkAlertsViewController.h; sourceTree = "<group>"; };
|
||||
8CCE165721EB1E0000173CD9 /* SettingsSeismicNetworkAlertsViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsSeismicNetworkAlertsViewController.m; sourceTree = "<group>"; };
|
||||
8CD08636218B3BEE0000CB5E /* ReteSismicaAnnotation.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ReteSismicaAnnotation.h; sourceTree = "<group>"; };
|
||||
8CD08637218B3BEE0000CB5E /* ReteSismicaAnnotation.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ReteSismicaAnnotation.m; sourceTree = "<group>"; };
|
||||
8CD08636218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNMapAnnotationSeismicNetwork.h; sourceTree = "<group>"; };
|
||||
8CD08637218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNMapAnnotationSeismicNetwork.m; sourceTree = "<group>"; };
|
||||
8CF05B4B218C41F90055012B /* PickerViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PickerViewController.m; sourceTree = "<group>"; };
|
||||
8CF05B4D218C41FA0055012B /* PickerViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PickerViewController.h; sourceTree = "<group>"; };
|
||||
8CF05B4F218C41FA0055012B /* PickerViewController.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = PickerViewController.xib; sourceTree = "<group>"; };
|
||||
@@ -365,8 +373,6 @@
|
||||
8CF12CD821DE49B600613AC5 /* NotificationViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NotificationViewController.m; sourceTree = "<group>"; };
|
||||
8CF12CDB21DE49B600613AC5 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
|
||||
8CF12CDD21DE49B600613AC5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
|
||||
8CF4F4D0216D2C780057110B /* EQNReteSmartphone.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNReteSmartphone.h; sourceTree = "<group>"; };
|
||||
8CF4F4D1216D2C780057110B /* EQNReteSmartphone.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNReteSmartphone.m; sourceTree = "<group>"; };
|
||||
8CF4F4D6216D3A110057110B /* EQNAreaCheck.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNAreaCheck.h; sourceTree = "<group>"; };
|
||||
8CF4F4D7216D3A110057110B /* EQNAreaCheck.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNAreaCheck.m; sourceTree = "<group>"; };
|
||||
8CF4F4D9216D44930057110B /* EQNPastquakes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNPastquakes.h; sourceTree = "<group>"; };
|
||||
@@ -384,14 +390,13 @@
|
||||
DC03BEAA250BC0A60084769B /* EQNRoundedButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNRoundedButton.swift; sourceTree = "<group>"; };
|
||||
DC08803E24F5A89000186D97 /* SettingEnableTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingEnableTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC08804024F5B41400186D97 /* SettingSliderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingSliderTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC0AE1A125381D4100111307 /* EQNAdsUtility.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EQNAdsUtility.h; sourceTree = "<group>"; };
|
||||
DC0AE1A225381D4100111307 /* EQNAdsUtility.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EQNAdsUtility.m; sourceTree = "<group>"; };
|
||||
DC0E551224F8063300D54270 /* SettingSegmentedTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingSegmentedTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC105640251E7ECE002579BB /* UIFont+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIFont+Extensions.swift"; sourceTree = "<group>"; };
|
||||
DC27EB2E24F6EBE000ACBFE0 /* SettingsSeismicNetworksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSeismicNetworksViewController.swift; sourceTree = "<group>"; };
|
||||
DC28142F2519C24400C1AFF7 /* SeismicNetworkTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworkTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC2814372519C56100C1AFF7 /* SeismicNetworksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicNetworksViewController.swift; sourceTree = "<group>"; };
|
||||
DC30BC872534DBBD0041B23B /* star_white1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = star_white1.png; sourceTree = "<group>"; };
|
||||
DC3B5428257FCBCA00C0B6A5 /* EQNReteSmartphone.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNReteSmartphone.swift; sourceTree = "<group>"; };
|
||||
DC3BA11024D1A9C90062EE7F /* SubscriptionsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionsViewController.swift; sourceTree = "<group>"; };
|
||||
DC3CE509250EB7A8005A7DD5 /* EQNGenericPickerViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNGenericPickerViewController.swift; sourceTree = "<group>"; };
|
||||
DC414C0024CDA09A008D9AE4 /* CHANGELOG.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = CHANGELOG.md; path = ../CHANGELOG.md; sourceTree = "<group>"; };
|
||||
@@ -400,6 +405,7 @@
|
||||
DC52B8A024FC145500ABEBA6 /* SettingsBaseViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SettingsBaseViewController.h; sourceTree = "<group>"; };
|
||||
DC52B8A124FC145500ABEBA6 /* SettingsBaseViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SettingsBaseViewController.m; sourceTree = "<group>"; };
|
||||
DC52B8A424FCCD6900ABEBA6 /* AppTheme.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppTheme.swift; sourceTree = "<group>"; };
|
||||
DC553AF525692E37000B521B /* StoryboardInitializable.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = StoryboardInitializable.swift; sourceTree = "<group>"; };
|
||||
DC646F26252B694A000AA5FD /* AlertsSeismicNotificationExpandedTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertsSeismicNotificationExpandedTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC646F31252B698B000AA5FD /* AlertsSeismicNotificationCompactTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertsSeismicNotificationCompactTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DC65B390250F243E00251693 /* SeismicSettingsNetworksViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicSettingsNetworksViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -517,6 +523,7 @@
|
||||
DCAA913E24F68A1D00145A3D /* SettingMultivaluesTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingMultivaluesTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DCB28CED24FB8400001F557E /* SettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsViewController.swift; sourceTree = "<group>"; };
|
||||
DCB45BC7250E86E100DB2D0C /* SeismicSettingsViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeismicSettingsViewController.swift; sourceTree = "<group>"; };
|
||||
DCB528202560161C005288E5 /* AlertSimulatorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlertSimulatorViewController.swift; sourceTree = "<group>"; };
|
||||
DCB6FBEB24D0B40600ED23B8 /* Colors.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Colors.xcassets; sourceTree = "<group>"; };
|
||||
DCBB267924D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscriptionsHeaderTableViewCell.swift; sourceTree = "<group>"; };
|
||||
DCBB267B24D1E98300F04559 /* EQNInsetTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EQNInsetTableViewCell.swift; sourceTree = "<group>"; };
|
||||
@@ -568,10 +575,8 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8C7CD64921F7D11700835812 /* ReteSismicaAnnotation.m in Frameworks */,
|
||||
8C7CD64A21F7D11700835812 /* ReteSismicaAnnotation.h in Frameworks */,
|
||||
8C465D9C21F7BBE700F04673 /* PastquakesAnnotation.m in Frameworks */,
|
||||
8C465D9D21F7BBE700F04673 /* PastquakesAnnotation.h in Frameworks */,
|
||||
8C7CD64921F7D11700835812 /* EQNMapAnnotationSeismicNetwork.m in Frameworks */,
|
||||
8C7CD64A21F7D11700835812 /* EQNMapAnnotationSeismicNetwork.h in Frameworks */,
|
||||
8C465D9A21F653AB00F04673 /* Assets.xcassets in Frameworks */,
|
||||
8CF12CD521DE49B600613AC5 /* UserNotificationsUI.framework in Frameworks */,
|
||||
8CF12CD321DE49B600613AC5 /* UserNotifications.framework in Frameworks */,
|
||||
@@ -581,6 +586,31 @@
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
65DBFB5225E2A2580041CBA6 /* Map annotation */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8CA46B9F2194532E00C63C16 /* EQNMapAnnotationSeismic.h */,
|
||||
8CA46BA02194532E00C63C16 /* EQNMapAnnotationSeismic.m */,
|
||||
8C602248218EDBE200C799C2 /* EQNMapAnnotationPastquakes.h */,
|
||||
8C602249218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m */,
|
||||
8CD08636218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.h */,
|
||||
8CD08637218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m */,
|
||||
);
|
||||
path = "Map annotation";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
65DBFB7D25E2CB020041CBA6 /* Ad templates */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
65DBFB7025E2BBF20041CBA6 /* GADTTemplateView.h */,
|
||||
65DBFB7225E2BBF20041CBA6 /* GADTTemplateView.m */,
|
||||
65DBFB7325E2BBF20041CBA6 /* GADTMediumTemplateView.h */,
|
||||
65DBFB7125E2BBF20041CBA6 /* GADTMediumTemplateView.m */,
|
||||
65DBFB6F25E2BBF20041CBA6 /* GADTMediumTemplateView.xib */,
|
||||
);
|
||||
path = "Ad templates";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8C465D9821F6539700F04673 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -624,19 +654,6 @@
|
||||
path = "Dettagli mappa";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8C60224B218EDBF700C799C2 /* annotation */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8CD08636218B3BEE0000CB5E /* ReteSismicaAnnotation.h */,
|
||||
8CD08637218B3BEE0000CB5E /* ReteSismicaAnnotation.m */,
|
||||
8C602248218EDBE200C799C2 /* PastquakesAnnotation.h */,
|
||||
8C602249218EDBE200C799C2 /* PastquakesAnnotation.m */,
|
||||
8CA46B9F2194532E00C63C16 /* SismaAnnotation.h */,
|
||||
8CA46BA02194532E00C63C16 /* SismaAnnotation.m */,
|
||||
);
|
||||
path = annotation;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
8CBD3DB92149B9AD0070C963 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -665,14 +682,12 @@
|
||||
children = (
|
||||
8CF66049214C09E0009F4314 /* model */,
|
||||
8C5EA22E217645C8002DC156 /* ViewController */,
|
||||
8CF66057214C566B009F4314 /* ServerRequest.h */,
|
||||
8CF66055214C566A009F4314 /* ServerRequest.m */,
|
||||
8CF66050214C0F7F009F4314 /* Costanti.h */,
|
||||
8CBD3DC52149B9AD0070C963 /* AppDelegate.h */,
|
||||
8CBD3DC62149B9AD0070C963 /* AppDelegate.m */,
|
||||
8C483CB021FDA8C700259FD2 /* Earthquake Network-Bridging-Header.h */,
|
||||
DCB6FBEA24D0B11300ED23B8 /* Controllers */,
|
||||
DCB6FBE924D0B0DF00ED23B8 /* Models */,
|
||||
DC553AFD25693C09000B521B /* Server Requests */,
|
||||
DCC23DED24D28F41003A2404 /* UI */,
|
||||
DC3ADD3024CB1F1E00737919 /* Storyboards */,
|
||||
DC3ADD2F24CB1EFB00737919 /* Libs */,
|
||||
@@ -721,25 +736,8 @@
|
||||
8CF66049214C09E0009F4314 /* model */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8C60224B218EDBF700C799C2 /* annotation */,
|
||||
8C8EBBA521540039002784BA /* EQNUser.h */,
|
||||
8C8EBBA621540039002784BA /* EQNUser.m */,
|
||||
8C4E343D215012FA008B0D2A /* EQNManager.h */,
|
||||
8C4E343E215012FA008B0D2A /* EQNManager.m */,
|
||||
8CF66051214C12DC009F4314 /* EQNMath.h */,
|
||||
8CF66052214C12DC009F4314 /* EQNMath.m */,
|
||||
8C4E34432152B707008B0D2A /* EQMAccelerometroManager.h */,
|
||||
8C4E34442152B707008B0D2A /* EQMAccelerometroManager.m */,
|
||||
8CF6604D214C0E58009F4314 /* EQNCalibrazione.h */,
|
||||
8CF6604E214C0E58009F4314 /* EQNCalibrazione.m */,
|
||||
8C4E34402152B5E8008B0D2A /* EQNRilevamento.h */,
|
||||
8C4E34412152B5E8008B0D2A /* EQNRilevamento.m */,
|
||||
8C4E34492152EE5B008B0D2A /* EQNGeneratoreURLServer.h */,
|
||||
8C4E344A2152EE5B008B0D2A /* EQNGeneratoreURLServer.m */,
|
||||
8CF4F4D0216D2C780057110B /* EQNReteSmartphone.h */,
|
||||
8CF4F4D1216D2C780057110B /* EQNReteSmartphone.m */,
|
||||
8CF4F4D6216D3A110057110B /* EQNAreaCheck.h */,
|
||||
8CF4F4D7216D3A110057110B /* EQNAreaCheck.m */,
|
||||
8CF4F4D9216D44930057110B /* EQNPastquakes.h */,
|
||||
8CF4F4DA216D44930057110B /* EQNPastquakes.m */,
|
||||
8C593E88217BA2470008B260 /* EQNSegnalazione.h */,
|
||||
@@ -776,8 +774,7 @@
|
||||
DC65B390250F243E00251693 /* SeismicSettingsNetworksViewController.swift */,
|
||||
DC2814372519C56100C1AFF7 /* SeismicNetworksViewController.swift */,
|
||||
DCC76BD7251F56050005C4DC /* SeismicCardSettingsViewController.swift */,
|
||||
8C2B25122193927E00E0E25E /* ReteSismiDettagliMappa.h */,
|
||||
8C2B25132193927E00E0E25E /* ReteSismiDettagliMappa.m */,
|
||||
65DBFB4A25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift */,
|
||||
);
|
||||
path = "Seismic Networks";
|
||||
sourceTree = "<group>";
|
||||
@@ -785,7 +782,9 @@
|
||||
DC28142E2519C21400C1AFF7 /* Cells */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
65DBFB7D25E2CB020041CBA6 /* Ad templates */,
|
||||
DC28142F2519C24400C1AFF7 /* SeismicNetworkTableViewCell.swift */,
|
||||
6525A82525E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift */,
|
||||
);
|
||||
path = Cells;
|
||||
sourceTree = "<group>";
|
||||
@@ -899,9 +898,25 @@
|
||||
path = Icons;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DC3640DF257E19A00037A4B7 /* Monitoring */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8CF66051214C12DC009F4314 /* EQNMath.h */,
|
||||
8CF66052214C12DC009F4314 /* EQNMath.m */,
|
||||
8C4E34432152B707008B0D2A /* EQNAccelerometroManager.h */,
|
||||
8C4E34442152B707008B0D2A /* EQNAccelerometroManager.m */,
|
||||
8CF6604D214C0E58009F4314 /* EQNCalibrazione.h */,
|
||||
8CF6604E214C0E58009F4314 /* EQNCalibrazione.m */,
|
||||
8C4E34402152B5E8008B0D2A /* EQNRilevamento.h */,
|
||||
8C4E34412152B5E8008B0D2A /* EQNRilevamento.m */,
|
||||
);
|
||||
path = Monitoring;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DC3ADD2A24CB1E6600737919 /* Supporting Files */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8C483CB021FDA8C700259FD2 /* Earthquake Network-Bridging-Header.h */,
|
||||
DCF10DDB24D2E7BE009F34C3 /* Earthquake Network-Prefix.pch */,
|
||||
8CBD3DD72149B9AD0070C963 /* main.m */,
|
||||
8C10B0C42282360900125C9F /* Info.plist */,
|
||||
@@ -935,6 +950,7 @@
|
||||
DC3ADD2F24CB1EFB00737919 /* Libs */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DC553AF525692E37000B521B /* StoryboardInitializable.swift */,
|
||||
DC10563F251E7EC0002579BB /* Extensions */,
|
||||
8CF66054214C566A009F4314 /* Reachability.h */,
|
||||
8CF66056214C566A009F4314 /* Reachability.m */,
|
||||
@@ -982,6 +998,17 @@
|
||||
path = Cells;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DC553AFD25693C09000B521B /* Server Requests */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8C4E34492152EE5B008B0D2A /* EQNGeneratoreURLServer.h */,
|
||||
8C4E344A2152EE5B008B0D2A /* EQNGeneratoreURLServer.m */,
|
||||
8CF66057214C566B009F4314 /* ServerRequest.h */,
|
||||
8CF66055214C566A009F4314 /* ServerRequest.m */,
|
||||
);
|
||||
path = "Server Requests";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DC99A50124E66DFB0071BC9F /* Commands */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
@@ -993,12 +1020,31 @@
|
||||
path = Commands;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DCB5281F256015EB005288E5 /* Simulator */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DCB528202560161C005288E5 /* AlertSimulatorViewController.swift */,
|
||||
);
|
||||
path = Simulator;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DCB528252560171A005288E5 /* Reports */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
8C5EA23B2177B51C002DC156 /* SegnalazioniViewController.h */,
|
||||
8C5EA23C2177B51C002DC156 /* SegnalazioniViewController.m */,
|
||||
);
|
||||
path = Reports;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
DCB6FBE924D0B0DF00ED23B8 /* Models */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
DC3640DF257E19A00037A4B7 /* Monitoring */,
|
||||
DCF9E15024F6EA0B002B6B1D /* Networks */,
|
||||
DC99A50124E66DFB0071BC9F /* Commands */,
|
||||
DCEFF21824F587CC009D3FE1 /* Settings */,
|
||||
65DBFB5225E2A2580041CBA6 /* Map annotation */,
|
||||
8C483CBB21FDACE500259FD2 /* VersioneProProducts.swift */,
|
||||
8C483CB721FDACD300259FD2 /* IAPHelper.swift */,
|
||||
DCF10DC524D2B8C7009F34C3 /* EQNPurchaseUtility.swift */,
|
||||
@@ -1008,11 +1054,14 @@
|
||||
DC4B67602517833F00634277 /* EQNSeismic.swift */,
|
||||
8CAFD7C321825E4A00F8BD29 /* EQNSisma.h */,
|
||||
8CAFD7C421825E4A00F8BD29 /* EQNSisma.m */,
|
||||
DC0AE1A125381D4100111307 /* EQNAdsUtility.h */,
|
||||
DC0AE1A225381D4100111307 /* EQNAdsUtility.m */,
|
||||
8CF05B55218C93BA0055012B /* EQNUtility.h */,
|
||||
8CF05B56218C93BA0055012B /* EQNUtility.m */,
|
||||
DCF0188E252F09C500C783F0 /* EQNUtility+Extensions.swift */,
|
||||
8C8EBBA521540039002784BA /* EQNUser.h */,
|
||||
8C8EBBA621540039002784BA /* EQNUser.m */,
|
||||
DC3B5428257FCBCA00C0B6A5 /* EQNReteSmartphone.swift */,
|
||||
8CF4F4D6216D3A110057110B /* EQNAreaCheck.h */,
|
||||
8CF4F4D7216D3A110057110B /* EQNAreaCheck.m */,
|
||||
);
|
||||
path = Models;
|
||||
sourceTree = "<group>";
|
||||
@@ -1024,13 +1073,13 @@
|
||||
DCDE0BD824E58CCE00209778 /* EQNMainTabBarController.m */,
|
||||
DC886A5B24E92D5500F7A5D3 /* EQNBaseViewController.h */,
|
||||
DC886A5C24E92D5500F7A5D3 /* EQNBaseViewController.m */,
|
||||
8C5EA23B2177B51C002DC156 /* SegnalazioniViewController.h */,
|
||||
8C5EA23C2177B51C002DC156 /* SegnalazioniViewController.m */,
|
||||
DC3CE508250EB78C005A7DD5 /* Shared */,
|
||||
DC47D1B9252A0C08004119F6 /* Alerts */,
|
||||
DCB528252560171A005288E5 /* Reports */,
|
||||
DCD3E3BE24D1555F007C78D4 /* InApp */,
|
||||
DCEFF21024F57163009D3FE1 /* Settings */,
|
||||
DC141968250E769B0059E060 /* Seismic Networks */,
|
||||
DCB5281F256015EB005288E5 /* Simulator */,
|
||||
);
|
||||
path = Controllers;
|
||||
sourceTree = "<group>";
|
||||
@@ -1142,7 +1191,6 @@
|
||||
8CBD3DBE2149B9AD0070C963 /* Sources */,
|
||||
8CBD3DBF2149B9AD0070C963 /* Frameworks */,
|
||||
8CBD3DC02149B9AD0070C963 /* Resources */,
|
||||
7E813A93FDCDA54E246F0BC7 /* [CP] Copy Pods Resources */,
|
||||
8CADAAA521B98C550044E256 /* Embed App Extensions */,
|
||||
213FE27D012BFA5BA1F850E2 /* [CP] Embed Pods Frameworks */,
|
||||
DCF07F9824D40DB600DCCA63 /* ShellScript */,
|
||||
@@ -1363,6 +1411,7 @@
|
||||
DC958D672535788E00D73D4A /* alert_sound.wav in Resources */,
|
||||
8CBD3DD22149B9AD0070C963 /* Assets.xcassets in Resources */,
|
||||
8CF05B53218C41FB0055012B /* PickerViewController.xib in Resources */,
|
||||
65DBFB7425E2BBF20041CBA6 /* GADTMediumTemplateView.xib in Resources */,
|
||||
DCB6FBEC24D0B40600ED23B8 /* Colors.xcassets in Resources */,
|
||||
8CBD3DCD2149B9AD0070C963 /* Main.storyboard in Resources */,
|
||||
);
|
||||
@@ -1388,18 +1437,30 @@
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network-frameworks.sh",
|
||||
"${BUILT_PRODUCTS_DIR}/DZNEmptyDataSet/DZNEmptyDataSet.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseCore/FirebaseCore.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseCoreDiagnostics/FirebaseCoreDiagnostics.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseCrashlytics/FirebaseCrashlytics.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseInstallations/FirebaseInstallations.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseInstanceID/FirebaseInstanceID.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/FirebaseMessaging/FirebaseMessaging.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/GoogleDataTransport/GoogleDataTransport.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/GoogleUtilities/GoogleUtilities.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/PromisesObjC/FBLPromises.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/Protobuf/Protobuf.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/Solar/Solar.framework",
|
||||
"${BUILT_PRODUCTS_DIR}/nanopb/nanopb.framework",
|
||||
);
|
||||
name = "[CP] Embed Pods Frameworks";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/DZNEmptyDataSet.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCore.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCoreDiagnostics.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseCrashlytics.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstallations.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseInstanceID.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FirebaseMessaging.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleDataTransport.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/GoogleUtilities.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/FBLPromises.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Protobuf.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/Solar.framework",
|
||||
"${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/nanopb.framework",
|
||||
);
|
||||
@@ -1426,26 +1487,6 @@
|
||||
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
7E813A93FDCDA54E246F0BC7 /* [CP] Copy Pods Resources */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
"${PODS_ROOT}/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network-resources.sh",
|
||||
"${PODS_ROOT}/GoogleMaps/Maps/Frameworks/GoogleMaps.framework/Resources/GoogleMaps.bundle",
|
||||
"${PODS_ROOT}/GooglePlaces/Frameworks/GooglePlaces.framework/Resources/GooglePlaces.bundle",
|
||||
);
|
||||
name = "[CP] Copy Pods Resources";
|
||||
outputPaths = (
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GoogleMaps.bundle",
|
||||
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/GooglePlaces.bundle",
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Earthquake Network/Pods-Earthquake Network-resources.sh\"\n";
|
||||
showEnvVarsInLog = 0;
|
||||
};
|
||||
DCF07F9824D40DB600DCCA63 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
@@ -1482,6 +1523,7 @@
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
DCEFF21324F5821E009D3FE1 /* SettingDetailTableViewCell.swift in Sources */,
|
||||
DC3B5429257FCBCA00C0B6A5 /* EQNReteSmartphone.swift in Sources */,
|
||||
DCC23DEF24D28F58003A2404 /* EQNEdgeInsetLabel.swift in Sources */,
|
||||
DCF0188F252F09C500C783F0 /* EQNUtility+Extensions.swift in Sources */,
|
||||
8CCE165121E7BAEC00173CD9 /* EQNNotificheReteSismiche.m in Sources */,
|
||||
@@ -1495,7 +1537,9 @@
|
||||
DC4B67612517833F00634277 /* EQNSeismic.swift in Sources */,
|
||||
DCF0188A252F055800C783F0 /* AlertsPositionDataTableViewCell.swift in Sources */,
|
||||
DCBB267E24D1EA2000F04559 /* SubscriptionProductTableViewCell.swift in Sources */,
|
||||
6525A82625E13FD4008FE0D0 /* SeismicNetworkAdvertiseTableViewCell.swift in Sources */,
|
||||
DC99A50524E66E430071BC9F /* EQNAppearanceCommand.swift in Sources */,
|
||||
65DBFB7525E2BBF20041CBA6 /* GADTMediumTemplateView.m in Sources */,
|
||||
DC03BEAB250BC0A60084769B /* EQNRoundedButton.swift in Sources */,
|
||||
8CCE164E21E7BACE00173CD9 /* EQNNotificheSegnalazioniUtente.m in Sources */,
|
||||
DCD4571C24F6CF0D00B58304 /* EQNGenericValue.swift in Sources */,
|
||||
@@ -1511,7 +1555,7 @@
|
||||
DC99A50724E66E5F0071BC9F /* EQNStartupCommandsBuilder.swift in Sources */,
|
||||
DCA5B6E7252E4BD8002AEC96 /* EQNBaseTableViewCell.swift in Sources */,
|
||||
8CF66058214C566B009F4314 /* ServerRequest.m in Sources */,
|
||||
8CD08638218B3BEE0000CB5E /* ReteSismicaAnnotation.m in Sources */,
|
||||
8CD08638218B3BEE0000CB5E /* EQNMapAnnotationSeismicNetwork.m in Sources */,
|
||||
DCF9E14D24F6D1AA002B6B1D /* EQNData.swift in Sources */,
|
||||
DC52B8A524FCCD6900ABEBA6 /* AppTheme.swift in Sources */,
|
||||
DC27EB2F24F6EBE000ACBFE0 /* SettingsSeismicNetworksViewController.swift in Sources */,
|
||||
@@ -1528,7 +1572,6 @@
|
||||
8CF6604F214C0E58009F4314 /* EQNCalibrazione.m in Sources */,
|
||||
DCBB84F0252CFC4600F12633 /* AlertsNoLocationTableViewCell.swift in Sources */,
|
||||
DCD3E3C024D15576007C78D4 /* PurchaseProVersionViewController.swift in Sources */,
|
||||
8C2B25142193927E00E0E25E /* ReteSismiDettagliMappa.m in Sources */,
|
||||
8CF05B51218C41FB0055012B /* PickerViewController.m in Sources */,
|
||||
DC99A50324E66E270071BC9F /* EQNCommandProtocol.swift in Sources */,
|
||||
DCB45BC8250E86E100DB2D0C /* SeismicSettingsViewController.swift in Sources */,
|
||||
@@ -1540,32 +1583,34 @@
|
||||
8C14113121ED3E5B00A59729 /* SettingsRealTimeAlertsViewController.m in Sources */,
|
||||
DCBB267A24D1E7F500F04559 /* SubscriptionsHeaderTableViewCell.swift in Sources */,
|
||||
DC65B391250F243E00251693 /* SeismicSettingsNetworksViewController.swift in Sources */,
|
||||
8CF4F4D2216D2C780057110B /* EQNReteSmartphone.m in Sources */,
|
||||
65DBFB4B25E29DD60041CBA6 /* SeismicNetworksMapDetailViewController.swift in Sources */,
|
||||
DC08804124F5B41400186D97 /* SettingSliderTableViewCell.swift in Sources */,
|
||||
8CBD3DD82149B9AD0070C963 /* main.m in Sources */,
|
||||
8CF05B57218C93BA0055012B /* EQNUtility.m in Sources */,
|
||||
8C4E34422152B5E8008B0D2A /* EQNRilevamento.m in Sources */,
|
||||
8C7A3B66225A5EA40045B266 /* NSDictionary+EQNExtensions.m in Sources */,
|
||||
8CF66053214C12DC009F4314 /* EQNMath.m in Sources */,
|
||||
DC0AE1A325381D4100111307 /* EQNAdsUtility.m in Sources */,
|
||||
DCF4A54524F8DB8300B17326 /* SettingDateTableViewCell.swift in Sources */,
|
||||
DC7EEE4A252A11C9004B4A2A /* AlertsSmartphoneNetworkTableViewCell.swift in Sources */,
|
||||
DC7EEE4F252A1634004B4A2A /* AlertsPriorityServiceTableViewCell.swift in Sources */,
|
||||
8C60224A218EDBE200C799C2 /* PastquakesAnnotation.m in Sources */,
|
||||
8C60224A218EDBE200C799C2 /* EQNMapAnnotationPastquakes.m in Sources */,
|
||||
65DBFB7625E2BBF20041CBA6 /* GADTTemplateView.m in Sources */,
|
||||
8CC1B15A217CB09100F22178 /* DettagliMappaViewController.m in Sources */,
|
||||
8C5EA23D2177B51C002DC156 /* SegnalazioniViewController.m in Sources */,
|
||||
8CF4F4D8216D3A110057110B /* EQNAreaCheck.m in Sources */,
|
||||
8C4E34452152B707008B0D2A /* EQMAccelerometroManager.m in Sources */,
|
||||
8C4E34452152B707008B0D2A /* EQNAccelerometroManager.m in Sources */,
|
||||
8CBD3DC72149B9AD0070C963 /* AppDelegate.m in Sources */,
|
||||
DC974AFF251748B300A139EC /* SeismicFiltersViewController.swift in Sources */,
|
||||
DC105641251E7ECE002579BB /* UIFont+Extensions.swift in Sources */,
|
||||
8CA46BA12194532E00C63C16 /* SismaAnnotation.m in Sources */,
|
||||
8CA46BA12194532E00C63C16 /* EQNMapAnnotationSeismic.m in Sources */,
|
||||
DCB28CEE24FB8400001F557E /* SettingsViewController.swift in Sources */,
|
||||
DCB528212560161C005288E5 /* AlertSimulatorViewController.swift in Sources */,
|
||||
DCC76BD8251F56050005C4DC /* SeismicCardSettingsViewController.swift in Sources */,
|
||||
DC3CE50A250EB7A8005A7DD5 /* EQNGenericPickerViewController.swift in Sources */,
|
||||
8C602246218D9DB200C799C2 /* PastquakesDettagliMappa.m in Sources */,
|
||||
DCEFF21A24F587E3009D3FE1 /* SettingItem.swift in Sources */,
|
||||
8C8EBBA721540039002784BA /* EQNUser.m in Sources */,
|
||||
DC553AF625692E37000B521B /* StoryboardInitializable.swift in Sources */,
|
||||
8CADAA9421B2627D0044E256 /* LogViewController.m in Sources */,
|
||||
DC3BA11124D1A9C90062EE7F /* SubscriptionsViewController.swift in Sources */,
|
||||
DC646F27252B694A000AA5FD /* AlertsSeismicNotificationExpandedTableViewCell.swift in Sources */,
|
||||
@@ -1576,12 +1621,12 @@
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
8C7CD64821F7D0F800835812 /* ReteSismicaAnnotation.m in Sources */,
|
||||
8C7CD64821F7D0F800835812 /* EQNMapAnnotationSeismicNetwork.m in Sources */,
|
||||
8C465D9F21F7BE0600F04673 /* Assets.xcassets in Sources */,
|
||||
DC0AE1B92538204100111307 /* EQNSegnalazione.m in Sources */,
|
||||
65DBFB5F25E2A5010041CBA6 /* EQNMapAnnotationPastquakes.m in Sources */,
|
||||
DC0AE1B52538202300111307 /* EQNUtility.m in Sources */,
|
||||
DC0AE1BA2538204100111307 /* EQNPastquakes.m in Sources */,
|
||||
8C465D9E21F7BD8700F04673 /* PastquakesAnnotation.m in Sources */,
|
||||
8CF12CD921DE49B600613AC5 /* NotificationViewController.m in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
@@ -1660,12 +1705,12 @@
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationService/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.EQNNotificationService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "Earthquake Network Extensions - Development";
|
||||
@@ -1682,12 +1727,12 @@
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationService/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.EQNNotificationService;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "Earthquake Network Extensions - Development";
|
||||
@@ -1820,14 +1865,97 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Earthquake Network/Earthquake Network.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
GCC_PREFIX_HEADER = "Earthquake Network/Earthquake Network-Prefix.pch";
|
||||
INFOPLIST_FILE = "Earthquake Network/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"c++\"",
|
||||
"-l\"sqlite3\"",
|
||||
"-l\"z\"",
|
||||
"-framework",
|
||||
"\"AVFoundation\"",
|
||||
"-framework",
|
||||
"\"AudioToolbox\"",
|
||||
"-framework",
|
||||
"\"CFNetwork\"",
|
||||
"-framework",
|
||||
"\"CoreGraphics\"",
|
||||
"-framework",
|
||||
"\"CoreMedia\"",
|
||||
"-framework",
|
||||
"\"CoreTelephony\"",
|
||||
"-framework",
|
||||
"\"CoreVideo\"",
|
||||
"-framework",
|
||||
"\"DZNEmptyDataSet\"",
|
||||
"-framework",
|
||||
"\"FBLPromises\"",
|
||||
"-framework",
|
||||
"\"FirebaseAnalytics\"",
|
||||
"-framework",
|
||||
"\"FirebaseCore\"",
|
||||
"-framework",
|
||||
"\"FirebaseCoreDiagnostics\"",
|
||||
"-framework",
|
||||
"\"FirebaseCrashlytics\"",
|
||||
"-framework",
|
||||
"\"FirebaseInstallations\"",
|
||||
"-framework",
|
||||
"\"FirebaseInstanceID\"",
|
||||
"-framework",
|
||||
"\"FirebaseMessaging\"",
|
||||
"-framework",
|
||||
"\"Foundation\"",
|
||||
"-framework",
|
||||
"\"GoogleAppMeasurement\"",
|
||||
"-framework",
|
||||
"\"GoogleDataTransport\"",
|
||||
"-framework",
|
||||
"\"GoogleMobileAds\"",
|
||||
"-framework",
|
||||
"\"GoogleUtilities\"",
|
||||
"-framework",
|
||||
"\"MediaPlayer\"",
|
||||
"-framework",
|
||||
"\"MessageUI\"",
|
||||
"-framework",
|
||||
"\"MobileCoreServices\"",
|
||||
"-framework",
|
||||
"\"QuartzCore\"",
|
||||
"-framework",
|
||||
"\"Security\"",
|
||||
"-framework",
|
||||
"\"Solar\"",
|
||||
"-framework",
|
||||
"\"StoreKit\"",
|
||||
"-framework",
|
||||
"\"SystemConfiguration\"",
|
||||
"-framework",
|
||||
"\"UIKit\"",
|
||||
"-framework",
|
||||
"\"UserMessagingPlatform\"",
|
||||
"-framework",
|
||||
"\"WebKit\"",
|
||||
"-framework",
|
||||
"\"nanopb\"",
|
||||
"-weak_framework",
|
||||
"\"AdSupport\"",
|
||||
"-weak_framework",
|
||||
"\"JavaScriptCore\"",
|
||||
"-weak_framework",
|
||||
"\"SafariServices\"",
|
||||
"-weak_framework",
|
||||
"\"UserNotifications\"",
|
||||
"-weak_framework",
|
||||
"\"WebKit\"",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE = "";
|
||||
@@ -1848,13 +1976,96 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "Earthquake Network/Earthquake Network.entitlements";
|
||||
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
GCC_PREFIX_HEADER = "Earthquake Network/Earthquake Network-Prefix.pch";
|
||||
INFOPLIST_FILE = "Earthquake Network/Info.plist";
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
OTHER_LDFLAGS = (
|
||||
"$(inherited)",
|
||||
"-ObjC",
|
||||
"-l\"c++\"",
|
||||
"-l\"sqlite3\"",
|
||||
"-l\"z\"",
|
||||
"-framework",
|
||||
"\"AVFoundation\"",
|
||||
"-framework",
|
||||
"\"AudioToolbox\"",
|
||||
"-framework",
|
||||
"\"CFNetwork\"",
|
||||
"-framework",
|
||||
"\"CoreGraphics\"",
|
||||
"-framework",
|
||||
"\"CoreMedia\"",
|
||||
"-framework",
|
||||
"\"CoreTelephony\"",
|
||||
"-framework",
|
||||
"\"CoreVideo\"",
|
||||
"-framework",
|
||||
"\"DZNEmptyDataSet\"",
|
||||
"-framework",
|
||||
"\"FBLPromises\"",
|
||||
"-framework",
|
||||
"\"FirebaseAnalytics\"",
|
||||
"-framework",
|
||||
"\"FirebaseCore\"",
|
||||
"-framework",
|
||||
"\"FirebaseCoreDiagnostics\"",
|
||||
"-framework",
|
||||
"\"FirebaseCrashlytics\"",
|
||||
"-framework",
|
||||
"\"FirebaseInstallations\"",
|
||||
"-framework",
|
||||
"\"FirebaseInstanceID\"",
|
||||
"-framework",
|
||||
"\"FirebaseMessaging\"",
|
||||
"-framework",
|
||||
"\"Foundation\"",
|
||||
"-framework",
|
||||
"\"GoogleAppMeasurement\"",
|
||||
"-framework",
|
||||
"\"GoogleDataTransport\"",
|
||||
"-framework",
|
||||
"\"GoogleMobileAds\"",
|
||||
"-framework",
|
||||
"\"GoogleUtilities\"",
|
||||
"-framework",
|
||||
"\"MediaPlayer\"",
|
||||
"-framework",
|
||||
"\"MessageUI\"",
|
||||
"-framework",
|
||||
"\"MobileCoreServices\"",
|
||||
"-framework",
|
||||
"\"QuartzCore\"",
|
||||
"-framework",
|
||||
"\"Security\"",
|
||||
"-framework",
|
||||
"\"Solar\"",
|
||||
"-framework",
|
||||
"\"StoreKit\"",
|
||||
"-framework",
|
||||
"\"SystemConfiguration\"",
|
||||
"-framework",
|
||||
"\"UIKit\"",
|
||||
"-framework",
|
||||
"\"UserMessagingPlatform\"",
|
||||
"-framework",
|
||||
"\"WebKit\"",
|
||||
"-framework",
|
||||
"\"nanopb\"",
|
||||
"-weak_framework",
|
||||
"\"AdSupport\"",
|
||||
"-weak_framework",
|
||||
"\"JavaScriptCore\"",
|
||||
"-weak_framework",
|
||||
"\"SafariServices\"",
|
||||
"-weak_framework",
|
||||
"\"UserNotifications\"",
|
||||
"-weak_framework",
|
||||
"\"WebKit\"",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE = "";
|
||||
@@ -1870,12 +2081,12 @@
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationContent/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.EQNNotificationContent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "Earthquake Network Extensions - Development";
|
||||
@@ -1892,12 +2103,12 @@
|
||||
buildSettings = {
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CODE_SIGN_STYLE = Manual;
|
||||
CURRENT_PROJECT_VERSION = 46;
|
||||
CURRENT_PROJECT_VERSION = 58;
|
||||
DEVELOPMENT_TEAM = WJA4MR4CPC;
|
||||
INFOPLIST_FILE = EQNNotificationContent/Info.plist;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
|
||||
LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks";
|
||||
MARKETING_VERSION = 3.1.0;
|
||||
MARKETING_VERSION = 3.3.2;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.finazzi.distquake.EQNNotificationContent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "Earthquake Network Extensions - Development";
|
||||
|
||||
+7
@@ -50,6 +50,13 @@
|
||||
ReferencedContainer = "container:Earthquake Network.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
<AdditionalOption
|
||||
key = "NSZombieEnabled"
|
||||
value = "YES"
|
||||
isEnabled = "YES">
|
||||
</AdditionalOption>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
|
||||
-5
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Bucket
|
||||
type = "1"
|
||||
version = "2.0">
|
||||
</Bucket>
|
||||
-92
@@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1010"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8CBD3DC12149B9AD0070C963"
|
||||
BuildableName = "Earthquake Network.app"
|
||||
BlueprintName = "Earthquake Network"
|
||||
ReferencedContainer = "container:Earthquake Network.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES">
|
||||
<Testables>
|
||||
</Testables>
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8CBD3DC12149B9AD0070C963"
|
||||
BuildableName = "Earthquake Network.app"
|
||||
BlueprintName = "Earthquake Network"
|
||||
ReferencedContainer = "container:Earthquake Network.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
language = "it"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8CBD3DC12149B9AD0070C963"
|
||||
BuildableName = "Earthquake Network.app"
|
||||
BlueprintName = "Earthquake Network"
|
||||
ReferencedContainer = "container:Earthquake Network.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
<AdditionalOptions>
|
||||
</AdditionalOptions>
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<BuildableProductRunnable
|
||||
runnableDebuggingMode = "0">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "8CBD3DC12149B9AD0070C963"
|
||||
BuildableName = "Earthquake Network.app"
|
||||
BlueprintName = "Earthquake Network"
|
||||
ReferencedContainer = "container:Earthquake Network.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildableProductRunnable>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
-47
@@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>EQNNotificationContent.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>EQNNotificationContent.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>6</integer>
|
||||
</dict>
|
||||
<key>EQNNotificationService.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
<key>EQNNotificationService.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
<key>Earthquake Network.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
<key>NotificationService.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>5</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>8CBD3DC12149B9AD0070C963</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
BIN
Binary file not shown.
-18
@@ -1,18 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildLocationStyle</key>
|
||||
<string>UseAppPreferences</string>
|
||||
<key>CustomBuildLocationType</key>
|
||||
<string>RelativeToDerivedData</string>
|
||||
<key>DerivedDataLocationStyle</key>
|
||||
<string>Default</string>
|
||||
<key>EnabledFullIndexStoreVisibility</key>
|
||||
<false/>
|
||||
<key>IssueFilterStyle</key>
|
||||
<string>ShowActiveSchemeOnly</string>
|
||||
<key>LiveSourceIssuesEnabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
-87
@@ -1,87 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Bucket
|
||||
type = "0"
|
||||
version = "2.0">
|
||||
<Breakpoints>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "NotificationService/NotificationService.m"
|
||||
timestampString = "566939074.092063"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "22"
|
||||
endingLineNumber = "22"
|
||||
landmarkName = "-didReceiveNotificationRequest:withContentHandler:"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Earthquake Network/ViewController/impostazioniNotifiche/ManuTableViewController.m"
|
||||
timestampString = "578957991.487044"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "178"
|
||||
endingLineNumber = "178"
|
||||
landmarkName = "-tableView:didSelectRowAtIndexPath:"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Earthquake Network/model/EQNManager.m"
|
||||
timestampString = "580927134.578099"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "215"
|
||||
endingLineNumber = "215"
|
||||
landmarkName = "-scaricaTempoDisponibile"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Earthquake Network/model/EQNGeneratoreURLServer.m"
|
||||
timestampString = "581369763.523838"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "269"
|
||||
endingLineNumber = "269"
|
||||
landmarkName = "+urlInvioImpostazioniNotifiche"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
BreakpointExtensionID = "Xcode.Breakpoint.FileBreakpoint">
|
||||
<BreakpointContent
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
filePath = "Earthquake Network/ViewController/Dettagli mappa/DettagliMappaViewController.m"
|
||||
timestampString = "586112158.88384"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "69"
|
||||
endingLineNumber = "69"
|
||||
landmarkName = "-setUpSegnalazioniUtente"
|
||||
landmarkType = "7">
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
</Breakpoints>
|
||||
</Bucket>
|
||||
@@ -11,7 +11,7 @@
|
||||
#import "ServerRequest.h"
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "EQNUser.h"
|
||||
#import "EQMAccelerometroManager.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
#import "EQNManager.h"
|
||||
#import "EQNUtility.h"
|
||||
#import "EQNAllertaSismica.h"
|
||||
@@ -19,7 +19,6 @@
|
||||
#import "EQNNotificheReteSismiche.h"
|
||||
#import "EQNMainTabBarController.h"
|
||||
|
||||
@import GoogleMaps;
|
||||
@import Firebase;
|
||||
@import UserNotifications;
|
||||
@import GoogleMobileAds;
|
||||
@@ -32,8 +31,11 @@
|
||||
|
||||
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
|
||||
{
|
||||
#ifdef DEBUG
|
||||
// Test ads on specific devices
|
||||
GADMobileAds.sharedInstance.requestConfiguration.testDeviceIdentifiers = @[ @"81392581e1790d4fbc6eff919815088d" ];
|
||||
#endif
|
||||
// start 3rd party SDKs and custom managers
|
||||
[GMSServices provideAPIKey:GOOGLE_MAP_KEY];
|
||||
[GADMobileAds.sharedInstance startWithCompletionHandler:^(GADInitializationStatus *status) {
|
||||
NSLog(@"[AppDelegate] GADMobileAds started with status: %@", status);
|
||||
}];
|
||||
@@ -78,18 +80,18 @@
|
||||
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
|
||||
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
|
||||
[[EQNManager defaultManager] avviaManager];
|
||||
[[EQMAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
[[EQNAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
|
||||
NSUInteger counter = [[NSUserDefaults standardUserDefaults] integerForKey:CONTEGGIO_APERTURE_PER_SCONTO];
|
||||
NSUInteger counter = [[NSUserDefaults standardUserDefaults] integerForKey:EQNUserDefaultProDiscountOpenCounter];
|
||||
counter += 1;
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:counter forKey:CONTEGGIO_APERTURE_PER_SCONTO];
|
||||
[[NSUserDefaults standardUserDefaults] setInteger:counter forKey:EQNUserDefaultProDiscountOpenCounter];
|
||||
}
|
||||
|
||||
|
||||
- (void)applicationWillEnterForeground:(UIApplication *)application {
|
||||
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
|
||||
[[EQNManager defaultManager] stopManager];
|
||||
[[EQMAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
[[EQNAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
|
||||
}
|
||||
|
||||
@@ -139,7 +141,7 @@
|
||||
- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
|
||||
{
|
||||
NSURL *url = [EQNGeneratoreURLServer urlPosizione];
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:posizione success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataPosizione success:^(id result) {
|
||||
completionHandler(UIBackgroundFetchResultNewData);
|
||||
} failure:^(NSError *error) {
|
||||
completionHandler(UIBackgroundFetchResultFailed);
|
||||
@@ -179,7 +181,6 @@
|
||||
[EQNNotificheReteSismiche saveDefaultValues];
|
||||
}
|
||||
|
||||
[[NSUserDefaults standardUserDefaults] setObject:fcmToken forKey:TOKEN_USER];
|
||||
[EQNUser defaultUser].tokenUser = fcmToken;
|
||||
}
|
||||
|
||||
|
||||
@@ -12,9 +12,7 @@
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "EQNManager.h"
|
||||
#import "PastquakesDettagliMappa.h"
|
||||
#import "PastquakesAnnotation.h"
|
||||
#import "EQNUser.h"
|
||||
#import "AppDelegate.h"
|
||||
#import "EQNAreaCheck.h"
|
||||
@import StoreKit;
|
||||
@import SafariServices;
|
||||
@@ -70,7 +68,7 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(didChangeAuthorizationStatusNotification:)
|
||||
name:EQNNotificationDidChangeAuthorizationStatus
|
||||
name:EQNAuthorizationStatusDidChangeNotification
|
||||
object:nil];
|
||||
}
|
||||
|
||||
@@ -176,7 +174,7 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
- (void)actionShareApp
|
||||
{
|
||||
NSString *appName = [NSProcessInfo processInfo].processName;
|
||||
NSString *content = [NSString stringWithFormat:@"%@%@ %@",NSLocalizedString(@"Scarica ", @""), appName, EQNAppStoreUrl];
|
||||
NSString *content = [NSString stringWithFormat:@"%@ %@ %@",NSLocalizedString(@"Scarica", @""), appName, EQNAppStoreUrl];
|
||||
|
||||
UIActivityViewController* activityViewController = [[UIActivityViewController alloc] initWithActivityItems:@[content]
|
||||
applicationActivities:nil];
|
||||
@@ -195,11 +193,11 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
[self presentViewController:controller animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)actionComingSoon
|
||||
- (void)actionOpenSimulator
|
||||
{
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"Coming soon..." message:@"🚀" preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:nil]];
|
||||
[self presentViewController:alert animated:YES completion:nil];
|
||||
AlertSimulatorViewController *controller = [[AlertSimulatorViewController alloc] init];
|
||||
UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:controller];
|
||||
[self presentViewController:navController animated:YES completion:nil];
|
||||
}
|
||||
|
||||
- (void)actionHowItWorks
|
||||
@@ -222,7 +220,7 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
}
|
||||
|
||||
NSURL *url = [EQNGeneratoreURLServer urlAlertPushTest];
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:alertPushTest success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataAlertPushTest success:^(id result) {
|
||||
// nope
|
||||
} failure:^(NSError *error) {
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
@@ -281,7 +279,7 @@ typedef NS_ENUM(NSInteger, AllerteTableRow) {
|
||||
[weakSelf actionTestPush];
|
||||
};
|
||||
cell.onTapSimulator = ^{
|
||||
[weakSelf actionComingSoon];
|
||||
[weakSelf actionOpenSimulator];
|
||||
};
|
||||
cell.onTapHowItWorks = ^{
|
||||
[weakSelf actionHowItWorks];
|
||||
|
||||
+2
-2
@@ -29,8 +29,8 @@ class AlertsPastEartquakesTableViewCell: EQNBaseTableViewCell {
|
||||
private func updateUI() {
|
||||
guard let smartphoneNetwork = smartphoneNetwork else { return }
|
||||
|
||||
last24hLabel.text = smartphoneNetwork.eq;
|
||||
from2013Label.text = smartphoneNetwork.eq_p;
|
||||
last24hLabel.text = "\(smartphoneNetwork.counterLastDayAlerts)"
|
||||
from2013Label.text = "\(smartphoneNetwork.counterTotalAlerts)"
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
+2
-2
@@ -23,9 +23,9 @@ class AlertsPriorityServiceTableViewCell: EQNBaseTableViewCell {
|
||||
// MARK: - Private
|
||||
|
||||
private func updateUI() {
|
||||
guard let smartphoneNetwork = smartphoneNetwork, let minutes = Int(smartphoneNetwork.diff) else { return }
|
||||
guard let smartphoneNetwork = smartphoneNetwork else { return }
|
||||
|
||||
let formattedTime = EQNUtility.formattedString(forTimeDifference: minutes)
|
||||
let formattedTime = EQNUtility.formattedString(forTimeDifference: smartphoneNetwork.lastSubscriptionDiff)
|
||||
lastSubscriptionLabel.text = String(format: NSLocalizedString("inapp_adv", comment: ""), formattedTime)
|
||||
}
|
||||
}
|
||||
|
||||
+49
-14
@@ -15,6 +15,7 @@ class AlertsSeismicNotificationExpandedTableViewCell: EQNBaseTableViewCell, MKMa
|
||||
|
||||
@objc var notification: [String: Any]? {
|
||||
didSet {
|
||||
startCountdown()
|
||||
updateUI()
|
||||
}
|
||||
}
|
||||
@@ -28,6 +29,7 @@ class AlertsSeismicNotificationExpandedTableViewCell: EQNBaseTableViewCell, MKMa
|
||||
|
||||
@IBOutlet weak var notificationTitleLabel: UILabel!
|
||||
@IBOutlet weak var notificationDescriptionLabel: UILabel!
|
||||
@IBOutlet weak var waveTimeLabel: UILabel!
|
||||
@IBOutlet weak var mapView: MKMapView! {
|
||||
didSet {
|
||||
mapView.delegate = self
|
||||
@@ -35,9 +37,22 @@ class AlertsSeismicNotificationExpandedTableViewCell: EQNBaseTableViewCell, MKMa
|
||||
mapView.isZoomEnabled = false
|
||||
}
|
||||
}
|
||||
private var impactTimestamp: Date?
|
||||
private var countdownTimer: Timer?
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func startCountdown() {
|
||||
guard let notification = notification else { return }
|
||||
|
||||
// calculate the impact timestamp and start a timer for the countdown label
|
||||
if let impactTimestamp = EQNUtility.calculateUserSeismicTimestamp(fromUserInfo: notification) {
|
||||
self.impactTimestamp = impactTimestamp
|
||||
countdownTimer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector: #selector(countdownTimerFired(_:)), userInfo: nil, repeats: true)
|
||||
countdownTimer?.fire()
|
||||
}
|
||||
}
|
||||
|
||||
private func updateUI() {
|
||||
notificationTitleLabel.text = ""
|
||||
notificationDescriptionLabel.text = ""
|
||||
@@ -55,42 +70,48 @@ class AlertsSeismicNotificationExpandedTableViewCell: EQNBaseTableViewCell, MKMa
|
||||
if let title = alert["loc-key"] as? String, let args = alert["loc-args"] as? [String], let arg = args.first {
|
||||
notificationTitleLabel.text = String(format: NSLocalizedString(title, comment: ""), arg)
|
||||
}
|
||||
if let location = notification["location"],
|
||||
let counter = notification["counter"],
|
||||
let dateString = notification["datetime"] as? String,
|
||||
let date = EQNUtility.getDateFrom(dateString) {
|
||||
|
||||
// get coordinate
|
||||
var coordinate: CLLocation?
|
||||
if let latitudeString = notification["latitude"] as? String, let latitude = Double(latitudeString),
|
||||
let longitudeString = notification["longitude"] as? String, let longitude = Double(longitudeString) {
|
||||
|
||||
coordinate = CLLocation(latitude: latitude, longitude: longitude)
|
||||
}
|
||||
|
||||
if let coordinate = coordinate,
|
||||
let counter = notification["counter"],
|
||||
let dateString = notification["datetime"] as? String,
|
||||
let date = EQNUtility.getDateFrom(dateString) {
|
||||
|
||||
let distance = EQNUser.default().lastPosition?.distance(from: coordinate) ?? 0.0
|
||||
let distanceRound = Int(round(distance / 1_000))
|
||||
let difference = Int(NSDate().timeIntervalSince(date) / 60.0)
|
||||
|
||||
notificationDescriptionLabel.text = ""
|
||||
+ NSLocalizedString("Distanza", comment: "") + " \(location)"
|
||||
+ NSLocalizedString("Distanza", comment: "") + " \(distanceRound) km"
|
||||
+ " - " + EQNUtility.formattedString(forTimeDifference: difference)
|
||||
+ "\n" + String(format: NSLocalizedString("map_number", comment: ""), "\(counter)")
|
||||
}
|
||||
|
||||
if let latitudeString = notification["latitude"] as? String,
|
||||
let latitude = Double(latitudeString),
|
||||
let longitudeString = notification["longitude"] as? String,
|
||||
let longitude = Double(longitudeString) {
|
||||
|
||||
let coordinate = CLLocation(latitude: latitude, longitude: longitude)
|
||||
if let coordinate = coordinate {
|
||||
let span = MKCoordinateSpan(latitudeDelta: 10.5, longitudeDelta: 10.5)
|
||||
let region = MKCoordinateRegion(center: coordinate.coordinate, span: span)
|
||||
|
||||
mapView.setCenter(coordinate.coordinate, animated: false)
|
||||
mapView.setRegion(region, animated: true)
|
||||
|
||||
let annotation = PastquakesAnnotation(title: "", location: coordinate.coordinate, intensita: intensity)
|
||||
let annotation = EQNMapAnnotationPastquakes(title: "", location: coordinate.coordinate, intensita: intensity)
|
||||
mapView.addAnnotation(annotation)
|
||||
}
|
||||
}
|
||||
|
||||
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
|
||||
guard let annotation = annotation as? PastquakesAnnotation else {
|
||||
guard let annotation = annotation as? EQNMapAnnotationPastquakes else {
|
||||
return nil
|
||||
}
|
||||
|
||||
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: IDENTIFIER_ANNOTATION_PASTQUAKES)
|
||||
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: EQNMapAnnotationPastquakesIdentifier)
|
||||
if annotationView == nil {
|
||||
annotationView = annotation.annotationView()
|
||||
} else {
|
||||
@@ -111,6 +132,20 @@ class AlertsSeismicNotificationExpandedTableViewCell: EQNBaseTableViewCell, MKMa
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@objc private func countdownTimerFired(_ sender: Timer) {
|
||||
guard let impactTimestamp = impactTimestamp else { return }
|
||||
|
||||
let now = Date()
|
||||
let difference = max(impactTimestamp.timeIntervalSince(now), 0)
|
||||
waveTimeLabel.text = String(format: "%@ %.0f %@", NSLocalizedString("alert_wave", comment: ""), difference, NSLocalizedString("alert_seconds", comment: ""))
|
||||
|
||||
if difference <= 0 {
|
||||
// stop the countdown
|
||||
countdownTimer?.invalidate()
|
||||
countdownTimer = nil
|
||||
}
|
||||
}
|
||||
|
||||
@IBAction private func shareAppTapped(_ sender: UIButton) {
|
||||
onTapShareApp?()
|
||||
}
|
||||
|
||||
+1
-1
@@ -28,7 +28,7 @@ class AlertsSmartphoneNetworkTableViewCell: EQNBaseTableViewCell {
|
||||
private func updateUI() {
|
||||
guard let smartphoneNetwork = smartphoneNetwork else { return }
|
||||
|
||||
smartphoneCounterLabel.text = smartphoneNetwork.green.stringValue
|
||||
smartphoneCounterLabel.text = "\(smartphoneNetwork.counterSmartphones)"
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@@ -14,11 +14,11 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
- (void)refreshUI;
|
||||
|
||||
/// Handle `IAPHelperPurchaseNotification` notification
|
||||
/// Handle `EQNInAppPurchaseDidCompleteNotification` notification
|
||||
/// @param notification Notification fired
|
||||
- (void)didReceiveInAppNotification:(NSNotification *)notification;
|
||||
|
||||
/// Handle `EQNNotificationDidDownloadData` notification
|
||||
/// Handle `EQNDownloadDataDidCompleteNotification` notification
|
||||
/// @param notification Notification fired
|
||||
- (void)didReceiveDownloadCompleteNotification:(NSNotification *)notification;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
//
|
||||
|
||||
#import "EQNBaseViewController.h"
|
||||
#import "EQNUtility.h"
|
||||
#import "Costanti.h"
|
||||
@import GoogleMobileAds;
|
||||
|
||||
@interface EQNBaseViewController ()
|
||||
@@ -23,19 +23,24 @@
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
|
||||
[self addBannerView];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(didReceiveInAppNotification:)
|
||||
name:IAPHelperPurchaseNotification object:nil];
|
||||
name:EQNInAppPurchaseDidCompleteNotification object:nil];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(didReceiveDownloadCompleteNotification:)
|
||||
name:EQNNotificationDidDownloadData object:nil];
|
||||
name:EQNDownloadDataDidCompleteNotification object:nil];
|
||||
|
||||
}
|
||||
|
||||
- (void)viewWillAppear:(BOOL)animated
|
||||
{
|
||||
[super viewWillAppear:animated];
|
||||
|
||||
[self handleAdBanner];
|
||||
}
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
- (void)refreshUI
|
||||
@@ -43,13 +48,77 @@
|
||||
// nope
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (void)handleAdBanner
|
||||
{
|
||||
// ad banner mut be displayed only for non pro users
|
||||
if ([EQNPurchaseUtility isProVersionEnabled]) {
|
||||
[self hideAdBanner];
|
||||
return;
|
||||
}
|
||||
|
||||
[self showAdBanner];
|
||||
}
|
||||
|
||||
- (void)hideAdBanner
|
||||
{
|
||||
// make sure that the banner is hidden
|
||||
self.bannerContainerHeightConstraint.constant = 0;
|
||||
|
||||
// remove the banner (if available)
|
||||
[self.bannerView removeFromSuperview];
|
||||
self.bannerView = nil;
|
||||
}
|
||||
|
||||
- (void)showAdBanner
|
||||
{
|
||||
if (self.bannerView == nil) {
|
||||
[self createBanner];
|
||||
}
|
||||
|
||||
// Determine the view width to use for the ad width.
|
||||
CGRect frame = self.view.frame;
|
||||
// Here safe area is taken into account, hence the view frame is used after
|
||||
// the view has been laid out.
|
||||
if (@available(iOS 11.0, *)) {
|
||||
frame = UIEdgeInsetsInsetRect(self.view.frame, self.view.safeAreaInsets);
|
||||
}
|
||||
CGFloat viewWidth = frame.size.width;
|
||||
|
||||
// Step 3 - Get Adaptive GADAdSize and set the ad view.
|
||||
// Here the current interface orientation is used. If the ad is being
|
||||
// preloaded for a future orientation change or different orientation, the
|
||||
// function for the relevant orientation should be used.
|
||||
GADAdSize adSize = GADCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(viewWidth);
|
||||
self.bannerView.adSize = adSize;
|
||||
self.bannerContainerHeightConstraint.constant = adSize.size.height;
|
||||
|
||||
// Step 4 - Create an ad request and load the adaptive banner ad.
|
||||
GADRequest *request = [GADRequest request];
|
||||
[self.bannerView loadRequest:request];
|
||||
}
|
||||
|
||||
- (void)createBanner
|
||||
{
|
||||
self.bannerView = [[GADBannerView alloc] init];
|
||||
self.bannerView.adUnitID = EQNAdMobAppIdAdaptiveBanner;
|
||||
self.bannerView.rootViewController = self;
|
||||
self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[self.bannerContainerView addSubview:self.bannerView];
|
||||
|
||||
[self.bannerView.topAnchor constraintEqualToAnchor:self.bannerContainerView.topAnchor].active = YES;
|
||||
[self.bannerView.bottomAnchor constraintEqualToAnchor:self.bannerContainerView.bottomAnchor].active = YES;
|
||||
[self.bannerView.leadingAnchor constraintEqualToAnchor:self.bannerContainerView.leadingAnchor].active = YES;
|
||||
[self.bannerView.trailingAnchor constraintEqualToAnchor:self.bannerContainerView.trailingAnchor].active = YES;
|
||||
}
|
||||
|
||||
|
||||
#pragma mark - Notification
|
||||
|
||||
- (void)didReceiveInAppNotification:(NSNotification *)notification
|
||||
{
|
||||
[self.bannerView removeFromSuperview];
|
||||
self.bannerView = nil;
|
||||
self.bannerContainerHeightConstraint.constant = 0;
|
||||
[self hideAdBanner];
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
[self refreshUI];
|
||||
@@ -63,35 +132,4 @@
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (void)addBannerView
|
||||
{
|
||||
self.bannerView = [self createBannerView];
|
||||
if (self.bannerView == nil) {
|
||||
self.bannerContainerHeightConstraint.constant = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
self.bannerView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[self.view addSubview:self.bannerView];
|
||||
|
||||
[[self.bannerView.centerXAnchor constraintEqualToAnchor:self.bannerContainerView.centerXAnchor] setActive:YES];
|
||||
[[self.bannerView.bottomAnchor constraintEqualToAnchor:self.bannerContainerView.safeAreaLayoutGuide.bottomAnchor] setActive:YES];
|
||||
}
|
||||
|
||||
- (GADBannerView *)createBannerView
|
||||
{
|
||||
if ([EQNPurchaseUtility isProVersionEnabled]) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
GADBannerView *bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
|
||||
bannerView.adUnitID = EQN_ADMOB_ANNUNCIO_IDA;
|
||||
bannerView.rootViewController = self;
|
||||
bannerView.backgroundColor = [UIColor whiteColor];
|
||||
[bannerView loadRequest:[GADRequest request]];
|
||||
return bannerView;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -10,10 +10,7 @@
|
||||
#import "AppDelegate.h"
|
||||
#import "EQNBaseViewController.h"
|
||||
#import "SettingsBaseViewController.h"
|
||||
|
||||
#import "EQNUtility.h"
|
||||
#import "EQNManager.h"
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "ServerRequest.h"
|
||||
|
||||
@interface EQNMainTabBarController () <UITabBarControllerDelegate>
|
||||
@@ -35,19 +32,30 @@ static NSString * const SegueIdentifierLogs = @"ShowLogs";
|
||||
|
||||
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
|
||||
appDelegate.mainTabBarController = self;
|
||||
|
||||
[self sincronizza];
|
||||
|
||||
// check for an AppStore receipt
|
||||
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
|
||||
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
|
||||
if (receipt) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaRicevuta:receipt success:^(id result) {
|
||||
// nope
|
||||
} failure:^(NSError *error) {
|
||||
// nope
|
||||
}];
|
||||
}
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self
|
||||
selector:@selector(serverRegistrationFailedNotification:)
|
||||
name:EQNServerRegistrationDidFailNotification
|
||||
object:nil];
|
||||
|
||||
[self sincronizza];
|
||||
}
|
||||
|
||||
#pragma mark - Notification
|
||||
|
||||
- (void)serverRegistrationFailedNotification:(NSNotification *)notification
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Attenzione", nil)
|
||||
message:NSLocalizedString(@"error_server_registration", nil)
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"retry", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
||||
// retry server registration
|
||||
[[EQNUser defaultUser] verificaRegistrazione];
|
||||
}]];
|
||||
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"Annulla", nil) style:UIAlertActionStyleCancel handler:nil]];
|
||||
[self presentViewController:alert animated:YES completion:nil];
|
||||
});
|
||||
}
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
@@ -35,7 +35,7 @@ class PurchaseProVersionViewController: UIViewController {
|
||||
super.viewDidLoad()
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(handlePurchaseNotification(_:)),
|
||||
name: .IAPHelperPurchaseNotification,
|
||||
name: .EQNInAppPurchaseDidComplete,
|
||||
object: nil)
|
||||
|
||||
configureUI()
|
||||
|
||||
@@ -13,6 +13,9 @@ import StoreKit
|
||||
|
||||
class SubscriptionDetailViewController: UIViewController {
|
||||
|
||||
/// Enable this allows shake to enable the current subscription
|
||||
private static let ShareToEnableSubscription = false
|
||||
|
||||
var product: SKProduct? {
|
||||
didSet {
|
||||
updateUI()
|
||||
@@ -36,7 +39,7 @@ class SubscriptionDetailViewController: UIViewController {
|
||||
super.viewDidLoad()
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(handlePurchaseNotification(_:)),
|
||||
name: .IAPHelperPurchaseNotification,
|
||||
name: .EQNInAppPurchaseDidComplete,
|
||||
object: nil)
|
||||
|
||||
updateUI()
|
||||
@@ -122,12 +125,8 @@ class SubscriptionDetailViewController: UIViewController {
|
||||
|
||||
|
||||
extension SubscriptionDetailViewController {
|
||||
override var canBecomeFirstResponder: Bool {
|
||||
false
|
||||
}
|
||||
|
||||
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
|
||||
guard let product = product, event?.subtype == .motionShake else {
|
||||
guard let product = product, event?.subtype == .motionShake, Self.ShareToEnableSubscription else {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -73,11 +73,15 @@ class SubscriptionsViewController: UITableViewController {
|
||||
|
||||
private func addObservers() {
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(handlePurchaseNotification(_:)),
|
||||
name: .IAPHelperPurchaseNotification,
|
||||
name: .EQNInAppPurchaseDidComplete,
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(fail(_:)),
|
||||
name: .IAPHelperPurchaseNotificationFail,
|
||||
name: .EQNInAppPurchaseDidFail,
|
||||
object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(handleNoTransactionsNotification(_:)),
|
||||
name: .EQNInAppPurchaseNoTransactions,
|
||||
object: nil)
|
||||
}
|
||||
|
||||
@@ -173,8 +177,14 @@ class SubscriptionsViewController: UITableViewController {
|
||||
if isRestorePurchase {
|
||||
isRestorePurchase = false
|
||||
|
||||
var product: String = "unknown"
|
||||
if let productIdentifier = notification.object as? String, let productName = resourceNameForProductIdentifier(productIdentifier) {
|
||||
product = productName
|
||||
}
|
||||
|
||||
let message = "\(NSLocalizedString("purchase_pro_restore_alert_message", comment: ""))\n\n(\(product))"
|
||||
let alert = UIAlertController(title: NSLocalizedString("purchase_pro_restore_alert_title", comment: ""),
|
||||
message: NSLocalizedString("purchase_pro_restore_alert_message", comment: ""), preferredStyle: .alert)
|
||||
message: message, preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
||||
present(alert, animated: true, completion: nil)
|
||||
}
|
||||
@@ -182,6 +192,13 @@ class SubscriptionsViewController: UITableViewController {
|
||||
VersioneProProducts.store.loadPurchase()
|
||||
loadData()
|
||||
}
|
||||
|
||||
@objc func handleNoTransactionsNotification(_ notification: Notification) {
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""),
|
||||
message: NSLocalizedString("purchase_pro_no_subscriptions_alert_message", comment: ""), preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: nil))
|
||||
present(alert, animated: true, completion: nil)
|
||||
}
|
||||
|
||||
// MARK: - Table view data source
|
||||
|
||||
@@ -255,3 +272,13 @@ class SubscriptionsViewController: UITableViewController {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension SubscriptionsViewController: StoryboardInitializable {
|
||||
static var storyboardName: String {
|
||||
"Main"
|
||||
}
|
||||
|
||||
static var storyboardControllerId: String {
|
||||
"subscriptionsController"
|
||||
}
|
||||
}
|
||||
|
||||
+7
-7
@@ -87,13 +87,13 @@ static NSString * const SegueIdentifierMap = @"ShowMap";
|
||||
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Last24HCell" forIndexPath:indexPath];
|
||||
|
||||
UILabel *verdeLabel = (UILabel *)[cell viewWithTag:1];
|
||||
verdeLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.g_man];
|
||||
verdeLabel.text = [NSString stringWithFormat:@"%ld", (long)reteSmartPhone.manualGreen];
|
||||
|
||||
UILabel *giallaLabel = (UILabel *)[cell viewWithTag:2];
|
||||
giallaLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.y_man];
|
||||
giallaLabel.text = [NSString stringWithFormat:@"%ld", (long)reteSmartPhone.manualYellow];
|
||||
|
||||
UILabel *rossaLabel = (UILabel *)[cell viewWithTag:3];
|
||||
rossaLabel.text = [NSString stringWithFormat:@"%@", reteSmartPhone.r_man];
|
||||
rossaLabel.text = [NSString stringWithFormat:@"%ld", (long)reteSmartPhone.manualRed];
|
||||
return cell;
|
||||
}
|
||||
|
||||
@@ -153,7 +153,7 @@ static NSString * const SegueIdentifierMap = @"ShowMap";
|
||||
}
|
||||
|
||||
// ask for user confirmation
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Attenzione ", @"") message:NSLocalizedString(@"manual_sure", nil) preferredStyle:UIAlertControllerStyleAlert];
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Attenzione", @"") message:NSLocalizedString(@"manual_sure", nil) preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"manual_yes", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
||||
[self executeSendReportWithMagnitude:sender.tag];
|
||||
}]];
|
||||
@@ -178,13 +178,13 @@ static NSString * const SegueIdentifierMap = @"ShowMap";
|
||||
|
||||
NSURL *url = [EQNGeneratoreURLServer urlInvioMessagioTerremoto:magnitude withAdress:address];
|
||||
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:segnalazzioneTerremoto success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataSegnalazioneTerremoto success:^(id result) {
|
||||
|
||||
[self.userDefoult setObject:result forKey:CODE_MESSAGE_EQN];
|
||||
[self.userDefoult setObject:[NSDate date] forKey:DATA_MESSAGE_EQN];
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Segnalazione ", @"")
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Segnalazione", @"")
|
||||
message:NSLocalizedString(@"La tua segnalazione è stata inviata correttamente", @"")
|
||||
preferredStyle:UIAlertControllerStyleAlert];
|
||||
[alert addAction:[UIAlertAction actionWithTitle:NSLocalizedString(@"OK", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) {
|
||||
@@ -212,7 +212,7 @@ static NSString * const SegueIdentifierMap = @"ShowMap";
|
||||
UITextField * messaggio = alertController.textFields.firstObject;
|
||||
|
||||
NSURL *url = [EQNGeneratoreURLServer urlInvioCommentoTerremoto:messaggio.text codeMessage:[self.userDefoult objectForKey:CODE_MESSAGE_EQN]];
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:commentoTerremoto success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataCommentoTerremoto success:^(id result) {
|
||||
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
UIAlertController *alert = [UIAlertController alertControllerWithTitle:NSLocalizedString(@"Messaggio" , @"")
|
||||
+23
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
* Copyright 2019 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#import "GADTTemplateView.h"
|
||||
|
||||
/// A template for medium sized views. Renders a roughly square view with a call to action on the
|
||||
/// bottom and a horizontal image in the middle.
|
||||
@interface GADTMediumTemplateView : GADTTemplateView
|
||||
|
||||
@end
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
// Copyright 2019 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
#import "GADTMediumTemplateView.h"
|
||||
|
||||
@implementation GADTMediumTemplateView
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
self.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
|
||||
- (NSString *)getTemplateTypeName {
|
||||
return @"medium_template";
|
||||
}
|
||||
|
||||
@end
|
||||
+174
@@ -0,0 +1,174 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14460.31" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" colorMatched="YES">
|
||||
<device id="retina5_5" orientation="portrait">
|
||||
<adaptation id="fullscreen"/>
|
||||
</device>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14460.20"/>
|
||||
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
|
||||
</dependencies>
|
||||
<objects>
|
||||
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="GADTMediumTemplateView">
|
||||
<connections>
|
||||
<outlet property="adBadge" destination="PfZ-cd-zxs" id="Szh-GS-1OE"/>
|
||||
<outlet property="callToActionView" destination="Ekc-Zs-FHH" id="2Er-Iz-r30"/>
|
||||
<outlet property="iconView" destination="tcZ-gP-ynt" id="uYX-bV-cXT"/>
|
||||
<outlet property="mediaView" destination="1ne-Xk-CBH" id="3Lh-1Y-oAC"/>
|
||||
<outlet property="primaryTextView" destination="NKU-cb-NgA" id="WcC-uD-uFb"/>
|
||||
<outlet property="secondaryTextView" destination="41W-IZ-S0S" id="pUs-sn-Mws"/>
|
||||
<outlet property="tertiaryTextView" destination="ic2-4I-EtF" id="KnY-7K-UnN"/>
|
||||
</connections>
|
||||
</placeholder>
|
||||
<view opaque="NO" clipsSubviews="YES" clearsContextBeforeDrawing="NO" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" translatesAutoresizingMaskIntoConstraints="NO" id="h2X-7h-r2O">
|
||||
<rect key="frame" x="0.0" y="0.0" width="355" height="402"/>
|
||||
<subviews>
|
||||
<view opaque="NO" clearsContextBeforeDrawing="NO" userInteractionEnabled="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="qZf-ej-Zxg">
|
||||
<rect key="frame" x="10" y="199.66666666666663" width="335" height="202.33333333333337"/>
|
||||
<subviews>
|
||||
<button opaque="NO" userInteractionEnabled="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Ekc-Zs-FHH">
|
||||
<rect key="frame" x="0.0" y="153.33333333333334" width="335" height="39"/>
|
||||
<color key="backgroundColor" red="0.25882352939999997" green="0.52156862749999999" blue="0.95686274510000002" alpha="1" colorSpace="calibratedRGB"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="39" id="y8W-B6-JKk"/>
|
||||
</constraints>
|
||||
<state key="normal" title="Button">
|
||||
<color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
</state>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="JRU-6T-XIW">
|
||||
<rect key="frame" x="0.0" y="0.0" width="335" height="51"/>
|
||||
<subviews>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="dtV-H5-CUV">
|
||||
<rect key="frame" x="0.0" y="0.0" width="335" height="51"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" horizontalCompressionResistancePriority="1" verticalCompressionResistancePriority="1" translatesAutoresizingMaskIntoConstraints="NO" id="IDQ-dK-aNl">
|
||||
<rect key="frame" x="0.0" y="0.0" width="51" height="51"/>
|
||||
<subviews>
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" horizontalCompressionResistancePriority="1" verticalCompressionResistancePriority="1" translatesAutoresizingMaskIntoConstraints="NO" id="tcZ-gP-ynt">
|
||||
<rect key="frame" x="0.0" y="0.0" width="51" height="51"/>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="tcZ-gP-ynt" firstAttribute="leading" secondItem="IDQ-dK-aNl" secondAttribute="leading" id="080-xf-xNS"/>
|
||||
<constraint firstItem="tcZ-gP-ynt" firstAttribute="top" secondItem="IDQ-dK-aNl" secondAttribute="top" id="7ay-A1-lkK"/>
|
||||
<constraint firstAttribute="trailing" secondItem="tcZ-gP-ynt" secondAttribute="trailing" id="D58-gg-wEz"/>
|
||||
<constraint firstAttribute="width" secondItem="IDQ-dK-aNl" secondAttribute="height" multiplier="1:1" id="fy0-5g-4fT"/>
|
||||
<constraint firstAttribute="bottom" secondItem="tcZ-gP-ynt" secondAttribute="bottom" id="mcB-Kl-8SB"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ZMg-Gj-lfR">
|
||||
<rect key="frame" x="51" y="0.0" width="284" height="51"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Ad" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="PfZ-cd-zxs">
|
||||
<rect key="frame" x="10" y="30" width="28" height="21"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="21" id="5e5-3M-FF3"/>
|
||||
<constraint firstAttribute="width" constant="28" id="L2a-Ko-fWP"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" red="0.2274509804" green="0.4039215686" blue="0.15686274510000001" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="NKU-cb-NgA">
|
||||
<rect key="frame" x="10" y="0.0" width="266" height="25"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="25" id="iVB-Nr-QJm"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="boldSystem" pointSize="17"/>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ic2-4I-EtF">
|
||||
<rect key="frame" x="43" y="30" width="241" height="21"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="PfZ-cd-zxs" firstAttribute="top" secondItem="NKU-cb-NgA" secondAttribute="bottom" constant="5" id="8CL-eR-AJN"/>
|
||||
<constraint firstAttribute="trailing" secondItem="ic2-4I-EtF" secondAttribute="trailing" id="9Ig-ff-Xy9"/>
|
||||
<constraint firstItem="ic2-4I-EtF" firstAttribute="leading" secondItem="PfZ-cd-zxs" secondAttribute="trailing" constant="5" id="BvN-q8-2tx"/>
|
||||
<constraint firstItem="NKU-cb-NgA" firstAttribute="leading" secondItem="ZMg-Gj-lfR" secondAttribute="leading" constant="10" id="R0a-Yh-5hA"/>
|
||||
<constraint firstAttribute="bottom" secondItem="ic2-4I-EtF" secondAttribute="bottom" id="RsF-hZ-dlg"/>
|
||||
<constraint firstAttribute="trailing" secondItem="NKU-cb-NgA" secondAttribute="trailing" constant="8" id="Rur-KX-Eao"/>
|
||||
<constraint firstItem="PfZ-cd-zxs" firstAttribute="leading" secondItem="ZMg-Gj-lfR" secondAttribute="leading" constant="10" id="XOm-ic-qzo"/>
|
||||
<constraint firstItem="NKU-cb-NgA" firstAttribute="top" secondItem="ZMg-Gj-lfR" secondAttribute="top" id="XXu-i3-Bb8"/>
|
||||
<constraint firstItem="ic2-4I-EtF" firstAttribute="leading" secondItem="PfZ-cd-zxs" secondAttribute="trailing" constant="5" id="hI7-l2-cCQ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="PfZ-cd-zxs" secondAttribute="bottom" id="s9K-uZ-2fK"/>
|
||||
<constraint firstItem="ic2-4I-EtF" firstAttribute="top" secondItem="NKU-cb-NgA" secondAttribute="bottom" constant="5" id="zDa-Y8-eNv"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="IDQ-dK-aNl" secondAttribute="bottom" id="Pz3-Ne-UvS"/>
|
||||
<constraint firstItem="IDQ-dK-aNl" firstAttribute="top" secondItem="dtV-H5-CUV" secondAttribute="top" id="Um4-Pc-PRn"/>
|
||||
<constraint firstItem="IDQ-dK-aNl" firstAttribute="leading" secondItem="dtV-H5-CUV" secondAttribute="leading" id="ygw-iI-8p3"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="bottom" secondItem="dtV-H5-CUV" secondAttribute="bottom" id="JTS-sy-ZIx"/>
|
||||
<constraint firstItem="dtV-H5-CUV" firstAttribute="leading" secondItem="JRU-6T-XIW" secondAttribute="leading" id="KnB-yd-LES"/>
|
||||
<constraint firstAttribute="trailing" secondItem="dtV-H5-CUV" secondAttribute="trailing" id="c6Z-Wa-u8v"/>
|
||||
<constraint firstItem="dtV-H5-CUV" firstAttribute="top" secondItem="JRU-6T-XIW" secondAttribute="top" id="hLc-rA-agZ"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" lineBreakMode="wordWrap" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="41W-IZ-S0S">
|
||||
<rect key="frame" x="0.0" y="61.000000000000021" width="335" height="82.333333333333314"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="20.329999999999998" id="NUh-RX-SnN"/>
|
||||
</constraints>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="17"/>
|
||||
<color key="textColor" white="0.33333333329999998" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<accessibilityTraits key="traits" notEnabled="YES"/>
|
||||
</accessibility>
|
||||
<constraints>
|
||||
<constraint firstItem="JRU-6T-XIW" firstAttribute="top" secondItem="qZf-ej-Zxg" secondAttribute="top" id="7V3-bf-fEw"/>
|
||||
<constraint firstItem="JRU-6T-XIW" firstAttribute="leading" secondItem="qZf-ej-Zxg" secondAttribute="leading" id="7q0-md-byq"/>
|
||||
<constraint firstItem="Ekc-Zs-FHH" firstAttribute="top" secondItem="41W-IZ-S0S" secondAttribute="bottom" constant="10" id="Haj-5X-7Jq"/>
|
||||
<constraint firstItem="41W-IZ-S0S" firstAttribute="top" secondItem="JRU-6T-XIW" secondAttribute="bottom" constant="10" id="LUq-TO-4Ri"/>
|
||||
<constraint firstItem="Ekc-Zs-FHH" firstAttribute="leading" secondItem="qZf-ej-Zxg" secondAttribute="leading" id="N0d-Ud-bcH"/>
|
||||
<constraint firstAttribute="trailing" secondItem="Ekc-Zs-FHH" secondAttribute="trailing" id="QEk-Nl-LP0"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Ekc-Zs-FHH" secondAttribute="bottom" constant="10" id="fQb-8m-kWu"/>
|
||||
<constraint firstAttribute="trailing" secondItem="JRU-6T-XIW" secondAttribute="trailing" id="fpH-cd-zrf"/>
|
||||
<constraint firstAttribute="trailing" secondItem="41W-IZ-S0S" secondAttribute="trailing" id="rZu-Yd-6qa"/>
|
||||
<constraint firstItem="41W-IZ-S0S" firstAttribute="leading" secondItem="qZf-ej-Zxg" secondAttribute="leading" id="w16-DI-Ydj"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view clipsSubviews="YES" contentMode="scaleAspectFit" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="1ne-Xk-CBH" customClass="GADMediaView">
|
||||
<rect key="frame" x="0.0" y="0.0" width="355" height="199.66666666666666"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="width" secondItem="1ne-Xk-CBH" secondAttribute="height" multiplier="16:9" id="kTC-ip-nfX"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<accessibility key="accessibilityConfiguration">
|
||||
<accessibilityTraits key="traits" notEnabled="YES"/>
|
||||
</accessibility>
|
||||
<constraints>
|
||||
<constraint firstAttribute="trailing" secondItem="qZf-ej-Zxg" secondAttribute="trailing" constant="10" id="1Rv-ij-HDB"/>
|
||||
<constraint firstItem="qZf-ej-Zxg" firstAttribute="leading" secondItem="h2X-7h-r2O" secondAttribute="leading" constant="10" id="OCX-hu-Rvd"/>
|
||||
<constraint firstItem="qZf-ej-Zxg" firstAttribute="top" secondItem="1ne-Xk-CBH" secondAttribute="bottom" id="aHY-Ht-nDt"/>
|
||||
<constraint firstItem="1ne-Xk-CBH" firstAttribute="leading" secondItem="h2X-7h-r2O" secondAttribute="leading" id="cj9-Mw-8MR"/>
|
||||
<constraint firstAttribute="trailing" secondItem="1ne-Xk-CBH" secondAttribute="trailing" id="gLW-Sf-wcR"/>
|
||||
<constraint firstItem="1ne-Xk-CBH" firstAttribute="top" secondItem="h2X-7h-r2O" secondAttribute="top" id="ipR-Fl-Mie"/>
|
||||
<constraint firstAttribute="bottom" secondItem="qZf-ej-Zxg" secondAttribute="bottom" id="sWi-Jm-MXA"/>
|
||||
</constraints>
|
||||
<freeformSimulatedSizeMetrics key="simulatedDestinationMetrics"/>
|
||||
<point key="canvasLocation" x="-68.840579710144937" y="794.83695652173924"/>
|
||||
</view>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
|
||||
</objects>
|
||||
</document>
|
||||
+109
@@ -0,0 +1,109 @@
|
||||
/*
|
||||
* Copyright 2019 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
// Copyright © 2018 Google. All rights reserved.
|
||||
|
||||
#import <GoogleMobileAds/GoogleMobileAds.h>
|
||||
|
||||
/// Constants used to style your template.
|
||||
typedef NSString* GADTNativeTemplateStyleKey NS_STRING_ENUM;
|
||||
|
||||
/// The font, font color and background color for your call to action view.
|
||||
/// All templates have a call to action view.
|
||||
#pragma mark - Call To Action
|
||||
|
||||
/// Call to action font. Expects a UIFont.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionFont;
|
||||
|
||||
/// Call to action font color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionFontColor;
|
||||
|
||||
/// Call to action background color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionBackgroundColor;
|
||||
|
||||
/// The font, font color and background color for the first row of text in the template.
|
||||
/// All templates have a primary text area which is populated by the native ad's headline.
|
||||
#pragma mark - Primary Text
|
||||
|
||||
/// Primary text font. Expects a UIFont.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFont;
|
||||
|
||||
/// Primary text font color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFontColor;
|
||||
|
||||
/// Primary text background color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryBackgroundColor;
|
||||
|
||||
/// The font, font color and background color for the second row of text in the template.
|
||||
/// All templates have a secondary text area which is populated either by the body of the ad,
|
||||
/// or by the rating of the app.
|
||||
#pragma mark - Secondary Text
|
||||
|
||||
/// Secondary text font. Expects a UIFont.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFont;
|
||||
|
||||
/// Secondary text font color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFontColor;
|
||||
|
||||
/// Secondary text background color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryBackgroundColor;
|
||||
|
||||
/// The font, font color and background color for the third row of text in the template.
|
||||
/// The third row is used to display store name or the default tertiary text.
|
||||
#pragma mark - Tertiary Text
|
||||
|
||||
/// Tertiary text font. Expects a UIFont.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFont;
|
||||
|
||||
/// Tertiary text font color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFontColor;
|
||||
|
||||
/// Tertiary text background color. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryBackgroundColor;
|
||||
|
||||
#pragma mark - Additional Style Options
|
||||
|
||||
/// The background color for the bulk of the ad. Expects a UIColor.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyMainBackgroundColor;
|
||||
|
||||
/// The corner rounding radius for the icon view and call to action. Expects an NSNumber.
|
||||
extern GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCornerRadius;
|
||||
|
||||
/// The super class for every template object.
|
||||
/// This class has the majority of all layout and styling logic.
|
||||
@interface GADTTemplateView : GADNativeAdView
|
||||
@property(nonatomic, copy) NSDictionary<GADTNativeTemplateStyleKey, NSObject*>* styles;
|
||||
@property(weak) IBOutlet UILabel* primaryTextView;
|
||||
@property(weak) IBOutlet UILabel* secondaryTextView;
|
||||
@property(weak) IBOutlet UILabel* tertiaryTextView;
|
||||
@property(weak) IBOutlet UILabel* adBadge;
|
||||
@property(weak) IBOutlet UIImageView* brandImage;
|
||||
@property(weak) IBOutlet UIView* backgroundView;
|
||||
@property(weak) UIView* rootView;
|
||||
|
||||
/// Adds a constraint to the superview so that the template spans the width of its parent.
|
||||
/// Does nothing if there is no superview.
|
||||
- (void)addHorizontalConstraintsToSuperviewWidth;
|
||||
|
||||
/// Adds a constraint to the superview so that the template is centered vertically in its parent.
|
||||
/// Does nothing if there is no superview.
|
||||
- (void)addVerticalCenterConstraintToSuperview;
|
||||
|
||||
/// Utility method to get a color from a hex string.
|
||||
+ (UIColor*)colorFromHexString:(NSString*)hexString;
|
||||
|
||||
- (NSString *)getTemplateTypeName;
|
||||
@end
|
||||
+306
@@ -0,0 +1,306 @@
|
||||
// Copyright 2019 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
// Copyright © 2018 Google. All rights reserved.
|
||||
|
||||
#import "GADTTemplateView.h"
|
||||
#import <QuartzCore/QuartzCore.h>
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionFont =
|
||||
@"call_to_action_font";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionFontColor =
|
||||
@"call_to_action_font_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCallToActionBackgroundColor =
|
||||
@"call_to_action_background_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFont = @"secondary_font";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryFontColor =
|
||||
@"secondary_font_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeySecondaryBackgroundColor =
|
||||
@"secondary_background_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFont = @"primary_font";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryFontColor = @"primary_font_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyPrimaryBackgroundColor =
|
||||
@"primary_background_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFont = @"tertiary_font";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryFontColor =
|
||||
@"tertiary_font_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyTertiaryBackgroundColor =
|
||||
@"tertiary_background_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyMainBackgroundColor =
|
||||
@"main_background_color";
|
||||
|
||||
GADTNativeTemplateStyleKey const GADTNativeTemplateStyleKeyCornerRadius = @"corner_radius";
|
||||
|
||||
static NSString* const GADTBlue = @"#5C84F0";
|
||||
|
||||
@implementation GADTTemplateView {
|
||||
NSDictionary<GADTNativeTemplateStyleKey, NSObject*>* _defaultStyles;
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame {
|
||||
if (self = [super initWithFrame:frame]) {
|
||||
|
||||
|
||||
_rootView = [NSBundle.mainBundle loadNibNamed:NSStringFromClass([self class])
|
||||
owner:self
|
||||
options:nil]
|
||||
.firstObject;
|
||||
|
||||
[self addSubview:_rootView];
|
||||
|
||||
[self
|
||||
addConstraints:[NSLayoutConstraint
|
||||
constraintsWithVisualFormat:@"H:|[_rootView]|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:NSDictionaryOfVariableBindings(_rootView)]];
|
||||
[self
|
||||
addConstraints:[NSLayoutConstraint
|
||||
constraintsWithVisualFormat:@"V:|[_rootView]|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:NSDictionaryOfVariableBindings(_rootView)]];
|
||||
[self applyStyles];
|
||||
[self styleAdBadge];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSString *)getTemplateTypeName {
|
||||
return @"root";
|
||||
}
|
||||
|
||||
/// Returns the style value for the provided key or the default style if no styles dictionary
|
||||
/// was set.
|
||||
- (id)styleForKey:(GADTNativeTemplateStyleKey)key {
|
||||
return _styles[key] ?: nil;
|
||||
}
|
||||
|
||||
// Goes through all recognized style keys and updates the views accordingly, overwriting the
|
||||
// defaults.
|
||||
- (void)applyStyles {
|
||||
self.layer.borderColor = [GADTTemplateView colorFromHexString:@"E0E0E0"].CGColor;
|
||||
self.layer.borderWidth = 1.0f;
|
||||
[self.mediaView sizeToFit];
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyCornerRadius]) {
|
||||
float roundedCornerRadius =
|
||||
((NSNumber*)[self styleForKey:GADTNativeTemplateStyleKeyCornerRadius]).floatValue;
|
||||
|
||||
// Rounded corners
|
||||
self.iconView.layer.cornerRadius = roundedCornerRadius;
|
||||
self.iconView.clipsToBounds = YES;
|
||||
((UIButton*)self.callToActionView).layer.cornerRadius = roundedCornerRadius;
|
||||
((UIButton*)self.callToActionView).clipsToBounds = YES;
|
||||
}
|
||||
|
||||
// Fonts
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryFont]) {
|
||||
((UILabel*)_primaryTextView).font =
|
||||
(UIFont*)[self styleForKey:GADTNativeTemplateStyleKeyPrimaryFont];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryFont]) {
|
||||
((UILabel*)_secondaryTextView).font =
|
||||
(UIFont*)[self styleForKey:GADTNativeTemplateStyleKeySecondaryFont];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryFont]) {
|
||||
((UILabel*)_tertiaryTextView).font =
|
||||
(UIFont*)[self styleForKey:GADTNativeTemplateStyleKeyTertiaryFont];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyCallToActionFont]) {
|
||||
((UIButton*)self.callToActionView).titleLabel.font =
|
||||
(UIFont*)[self styleForKey:GADTNativeTemplateStyleKeyCallToActionFont];
|
||||
}
|
||||
|
||||
// Font colors
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryFontColor])
|
||||
((UILabel*)_primaryTextView).textColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyPrimaryFontColor];
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryFontColor]) {
|
||||
((UILabel*)_secondaryTextView).textColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeySecondaryFontColor];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryFontColor]) {
|
||||
((UILabel*)_tertiaryTextView).textColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyTertiaryFontColor];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyCallToActionFontColor]) {
|
||||
[((UIButton*)self.callToActionView)
|
||||
setTitleColor:(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyCallToActionFontColor]
|
||||
forState:UIControlStateNormal];
|
||||
}
|
||||
|
||||
// Background colors
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor]) {
|
||||
((UILabel*)_primaryTextView).backgroundColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeySecondaryBackgroundColor]) {
|
||||
((UILabel*)_secondaryTextView).backgroundColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeySecondaryBackgroundColor];
|
||||
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyTertiaryBackgroundColor]) {
|
||||
((UILabel*)_tertiaryTextView).backgroundColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyTertiaryBackgroundColor];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyCallToActionBackgroundColor]) {
|
||||
((UIButton*)self.callToActionView).backgroundColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyCallToActionBackgroundColor];
|
||||
}
|
||||
|
||||
if ([self styleForKey:GADTNativeTemplateStyleKeyMainBackgroundColor]) {
|
||||
self.backgroundColor = (UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyMainBackgroundColor];
|
||||
}
|
||||
|
||||
if (_backgroundView && [self styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor]) {
|
||||
_backgroundView.backgroundColor =
|
||||
(UIColor*)[self styleForKey:GADTNativeTemplateStyleKeyPrimaryBackgroundColor];
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// Styles the Ad Badge according to best practices.
|
||||
- (void)styleAdBadge {
|
||||
_adBadge.layer.borderColor = _adBadge.textColor.CGColor;
|
||||
_adBadge.layer.borderWidth = 1.0;
|
||||
_adBadge.layer.cornerRadius = 3.0;
|
||||
}
|
||||
|
||||
- (void)setStyles:(NSDictionary<GADTNativeTemplateStyleKey, NSObject*>*)styles {
|
||||
_styles = [styles copy];
|
||||
[self applyStyles];
|
||||
}
|
||||
|
||||
- (void)setNativeAd:(GADNativeAd*)nativeAd {
|
||||
[super setNativeAd:nativeAd];
|
||||
self.headlineView = _primaryTextView;
|
||||
NSString* adBody = nativeAd.body;
|
||||
NSString* cta = nativeAd.callToAction;
|
||||
NSString* headline = nativeAd.headline;
|
||||
NSString* tertiaryText;
|
||||
|
||||
if (nativeAd.store.length && !nativeAd.advertiser.length) {
|
||||
// Ad has store but not advertiser
|
||||
self.storeView = _tertiaryTextView;
|
||||
tertiaryText = nativeAd.store;
|
||||
} else if (!nativeAd.store.length && nativeAd.advertiser.length) {
|
||||
// Ad has advertiser but not store
|
||||
self.advertiserView = _tertiaryTextView;
|
||||
tertiaryText = nativeAd.advertiser;
|
||||
} else if (!nativeAd.store.length && !nativeAd.advertiser.length) {
|
||||
// Ad has both store and advertiser, default to showing advertiser.
|
||||
self.advertiserView = _tertiaryTextView;
|
||||
tertiaryText = nativeAd.advertiser;
|
||||
}
|
||||
|
||||
((UILabel*)_primaryTextView).text = headline;
|
||||
((UILabel*)_tertiaryTextView).text = tertiaryText;
|
||||
[((UIButton*)self.callToActionView) setTitle:cta forState:UIControlStateNormal];
|
||||
// Body text
|
||||
// We either show the number of stars an app has, or show the body of the ad.
|
||||
// Use the unicode characters for filled in or empty stars.
|
||||
if (nativeAd.starRating.floatValue > 0) {
|
||||
NSMutableString* stars = [[NSMutableString alloc] initWithString:@""];
|
||||
int count = 0;
|
||||
for (; count < nativeAd.starRating.intValue; count++) {
|
||||
NSString* filledStar = [NSString stringWithUTF8String:"\u2605"];
|
||||
[stars appendString:filledStar];
|
||||
}
|
||||
for (; count < 5; count++) {
|
||||
NSString* emptyStar = [NSString stringWithUTF8String:"\u2606"];
|
||||
[stars appendString:emptyStar];
|
||||
}
|
||||
adBody = stars;
|
||||
self.starRatingView = _secondaryTextView;
|
||||
} else {
|
||||
self.bodyView = _secondaryTextView;
|
||||
}
|
||||
|
||||
((UILabel*)_secondaryTextView).text = adBody;
|
||||
|
||||
if (nativeAd.icon) {
|
||||
((UIImageView*)self.iconView).image = nativeAd.icon.image;
|
||||
}
|
||||
[self.mediaView setMediaContent:nativeAd.mediaContent];
|
||||
|
||||
}
|
||||
|
||||
- (void)addHorizontalConstraintsToSuperviewWidth {
|
||||
// Add an autolayout constraint to make sure our template view stretches to fill the
|
||||
// width of its parent.
|
||||
if (self.superview) {
|
||||
UIView* child = self;
|
||||
[self.superview
|
||||
addConstraints:[NSLayoutConstraint
|
||||
constraintsWithVisualFormat:@"H:|[child]|"
|
||||
options:0
|
||||
metrics:nil
|
||||
views:NSDictionaryOfVariableBindings(child)]];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)addVerticalCenterConstraintToSuperview {
|
||||
if (self.superview) {
|
||||
UIView* child = self;
|
||||
[self.superview addConstraint:[NSLayoutConstraint constraintWithItem:self.superview
|
||||
attribute:NSLayoutAttributeCenterY
|
||||
relatedBy:NSLayoutRelationEqual
|
||||
toItem:child
|
||||
attribute:NSLayoutAttributeCenterY
|
||||
multiplier:1
|
||||
constant:0]];
|
||||
}
|
||||
}
|
||||
|
||||
/// Creates an opaque UIColor object from a byte-value color definition.
|
||||
+ (UIColor*)colorFromHexString:(NSString*)hexString {
|
||||
if (hexString == nil) {
|
||||
return nil;
|
||||
}
|
||||
NSRange range = [hexString rangeOfString:@"^#[0-9a-fA-F]{6}$" options:NSRegularExpressionSearch];
|
||||
if (range.location == NSNotFound) {
|
||||
return nil;
|
||||
}
|
||||
unsigned rgbValue = 0;
|
||||
NSScanner* scanner = [NSScanner scannerWithString:hexString];
|
||||
[scanner setScanLocation:1]; // Bypass '#' character.
|
||||
[scanner scanHexInt:&rgbValue];
|
||||
|
||||
return [UIColor colorWithRed:((rgbValue & 0xff0000) >> 16) / 255.0f
|
||||
green:((rgbValue & 0xff00) >> 8) / 255.0f
|
||||
blue:(rgbValue & 0xff) / 255.0f
|
||||
alpha:1];
|
||||
}
|
||||
@end
|
||||
+77
@@ -0,0 +1,77 @@
|
||||
//
|
||||
// SeismicNetworkAdvertiseTableViewCell.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Andrea Busi on 20/02/21.
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import GoogleMobileAds
|
||||
|
||||
|
||||
class SeismicNetworkAdvertiseTableViewCell: UITableViewCell {
|
||||
|
||||
static let Identifier = "SeismicNetworkAdvertiseTableViewCell"
|
||||
|
||||
private lazy var containerView: UIView = {
|
||||
let view = UIView(frame: .zero)
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.layer.cornerRadius = AppTheme.shared.borderCornerRadius
|
||||
view.layer.masksToBounds = false
|
||||
|
||||
// add shadow
|
||||
view.layer.shadowColor = UIColor.black.cgColor
|
||||
view.layer.shadowOpacity = 0.5
|
||||
view.layer.shadowOffset = CGSize(width: 0, height: 2)
|
||||
view.layer.shadowRadius = 2
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var bannerView: GADNativeAdView = {
|
||||
let view = GADTMediumTemplateView()
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
return view
|
||||
}()
|
||||
|
||||
// MARK: - Init
|
||||
|
||||
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
|
||||
super.init(style: style, reuseIdentifier: reuseIdentifier)
|
||||
setupUI()
|
||||
}
|
||||
|
||||
required init?(coder: NSCoder) {
|
||||
super.init(coder: coder)
|
||||
setupUI()
|
||||
}
|
||||
|
||||
// MARK - Private
|
||||
|
||||
private func setupUI() {
|
||||
selectionStyle = .default
|
||||
translatesAutoresizingMaskIntoConstraints = false
|
||||
backgroundColor = .clear
|
||||
|
||||
// container view
|
||||
contentView.addSubview(containerView)
|
||||
containerView.backgroundColor = .red
|
||||
containerView.topAnchor.constraint(equalTo: contentView.topAnchor, constant: 8.0).isActive = true
|
||||
containerView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -8.0).isActive = true
|
||||
containerView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor, constant: 8.0).isActive = true
|
||||
containerView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor, constant: -8.0).isActive = true
|
||||
containerView.heightAnchor.constraint(equalToConstant: 350.0).isActive = true
|
||||
|
||||
containerView.addSubview(bannerView)
|
||||
bannerView.topAnchor.constraint(equalTo: containerView.topAnchor).isActive = true
|
||||
bannerView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor).isActive = true
|
||||
bannerView.leadingAnchor.constraint(equalTo: containerView.leadingAnchor).isActive = true
|
||||
bannerView.trailingAnchor.constraint(equalTo: containerView.trailingAnchor).isActive = true
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
||||
func loadNativeAd(_ nativeAd: GADNativeAd) {
|
||||
bannerView.nativeAd = nativeAd
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
//
|
||||
// ReteSismiDettagliMappa.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Refactored by Andrea Busi on 26/09/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "DettagliMappaViewController.h"
|
||||
#import "EQNSisma.h"
|
||||
|
||||
|
||||
@interface ReteSismiDettagliMappa : DettagliMappaViewController
|
||||
@property (nonatomic, strong, nullable) EQNSisma *sisma;
|
||||
@end
|
||||
@@ -1,77 +0,0 @@
|
||||
//
|
||||
// ReteSismiDettagliMappa.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Refactored by Andrea Busi on 26/09/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ReteSismiDettagliMappa.h"
|
||||
#import "SismaAnnotation.h"
|
||||
#import "EQNAdsUtility.h"
|
||||
|
||||
@interface ReteSismiDettagliMappa ()
|
||||
@property (nonatomic, strong) GADBannerView *bannerView;
|
||||
@end
|
||||
|
||||
@implementation ReteSismiDettagliMappa
|
||||
|
||||
#pragma mark - View Lifecycle
|
||||
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
[super viewDidLoad];
|
||||
|
||||
[self setupUI];
|
||||
|
||||
for (EQNSisma *sismi in [EQNManager defaultManager].retiSismiche ) {
|
||||
[self creaMarcherWithSegnalazione:sismi];
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
- (void)setupUI
|
||||
{
|
||||
self.mapView.delegate = self;
|
||||
self.bannerView = [EQNAdsUtility ottieniBannerWithController:self position:YES];
|
||||
|
||||
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back"]
|
||||
style:UIBarButtonItemStyleDone
|
||||
target:self
|
||||
action:@selector(chiudi:)];
|
||||
self.navigationController.navigationItem.leftBarButtonItem = backButton;
|
||||
}
|
||||
|
||||
- (void)creaMarcherWithSegnalazione:(id)segnalazione
|
||||
{
|
||||
[super creaMarcherWithSegnalazione:segnalazione];
|
||||
|
||||
SismaAnnotation *anAnnotation = [[SismaAnnotation alloc] initWithTitle:self.sisma.place location:self.sisma.coordinate.coordinate intensita:[self.sisma.magnitude doubleValue]];
|
||||
|
||||
[self.mapView addAnnotation:anAnnotation];
|
||||
|
||||
MKCoordinateSpan span = MKCoordinateSpanMake(10.5, 10.5);
|
||||
MKCoordinateRegion region = MKCoordinateRegionMake(self.sisma.coordinate.coordinate, span);
|
||||
[self.mapView setCenterCoordinate:self.sisma.coordinate.coordinate animated:NO];
|
||||
[self.mapView setRegion:region animated:YES];
|
||||
}
|
||||
|
||||
#pragma mark - MKMapViewDelegate
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
|
||||
{
|
||||
if ([annotation isKindOfClass:[SismaAnnotation class]]) {
|
||||
SismaAnnotation *anLocation = (SismaAnnotation *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_SISMI];
|
||||
if (annotationView == nil) {
|
||||
annotationView = anLocation.annotationView;
|
||||
} else {
|
||||
annotationView.annotation = anLocation;
|
||||
}
|
||||
return annotationView;
|
||||
}
|
||||
return nil;
|
||||
}
|
||||
|
||||
@end
|
||||
+72
@@ -0,0 +1,72 @@
|
||||
//
|
||||
// SeismicNetworksMapDetailViewController.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Andrea Busi on 21/02/21.
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import MapKit
|
||||
|
||||
class SeismicNetworksMapDetailViewController: EQNBaseViewController, MKMapViewDelegate {
|
||||
|
||||
// MARK: - UI
|
||||
|
||||
@IBOutlet private weak var mapView: MKMapView!
|
||||
|
||||
// MARK: - State
|
||||
|
||||
var seismic: EQNSisma?
|
||||
|
||||
|
||||
// MARK: - View Lifecycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
setupUI()
|
||||
|
||||
if let seismic = seismic {
|
||||
addMarker(for: seismic)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func setupUI() {
|
||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(closeTapped(_:)))
|
||||
navigationItem.rightBarButtonItem = closeButton
|
||||
}
|
||||
|
||||
private func addMarker(for seismic: EQNSisma) {
|
||||
let annotation = EQNMapAnnotationSeismic(title: seismic.place, location: seismic.coordinate.coordinate, intensita: seismic.magnitude.doubleValue)
|
||||
mapView.addAnnotation(annotation)
|
||||
|
||||
let span = MKCoordinateSpan(latitudeDelta: 10.5, longitudeDelta: 10.5)
|
||||
let region = MKCoordinateRegion(center: seismic.coordinate.coordinate, span: span)
|
||||
mapView.setCenter(seismic.coordinate.coordinate, animated: false)
|
||||
mapView.setRegion(region, animated: true)
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@objc private func closeTapped(_ sender: Any) {
|
||||
dismiss(animated: true)
|
||||
}
|
||||
|
||||
// MARK: - MKMapViewDelegate
|
||||
|
||||
func mapView(_ mapView: MKMapView, viewFor annotation: MKAnnotation) -> MKAnnotationView? {
|
||||
if let sismaAnnotation = annotation as? EQNMapAnnotationSeismic {
|
||||
var annotationView = mapView.dequeueReusableAnnotationView(withIdentifier: EQNMapAnnotationSeismicIdentifier)
|
||||
if annotationView == nil {
|
||||
annotationView = sismaAnnotation.annotationView()
|
||||
} else {
|
||||
annotationView?.annotation = sismaAnnotation
|
||||
}
|
||||
return annotationView
|
||||
}
|
||||
return nil
|
||||
}
|
||||
}
|
||||
+93
-37
@@ -10,8 +10,13 @@ import UIKit
|
||||
import EventKitUI
|
||||
import DZNEmptyDataSet
|
||||
|
||||
class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate, UITableViewDataSource {
|
||||
class SeismicNetworksViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
|
||||
|
||||
private enum CellType {
|
||||
case seismic(EQNSisma)
|
||||
case advertise(GADNativeAd)
|
||||
}
|
||||
|
||||
private static let SegueIdentifierMap = "ShowMapDetail"
|
||||
private static let SegueIdentifierFilters = "ShowFilters"
|
||||
private static let SegueIdentifierSettings = "ShowSettings"
|
||||
@@ -23,8 +28,17 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
@IBOutlet private weak var tableView: UITableView?
|
||||
@IBOutlet private weak var expandeCollapseButton: UIBarButtonItem!
|
||||
|
||||
/// Seismisc to display
|
||||
private var seismics = [EQNSisma]()
|
||||
/// The ad loader
|
||||
private lazy var adLoader: GADAdLoader = {
|
||||
let adLoader = GADAdLoader(
|
||||
adUnitID: EQNAdMobAppIdNativeBanner, rootViewController: self,
|
||||
adTypes: [.native], options: nil)
|
||||
adLoader.delegate = self
|
||||
return adLoader
|
||||
}()
|
||||
|
||||
/// Cells to display (must be seismics or ad banners)
|
||||
private var rows = [CellType]()
|
||||
/// Informations to display on a single cell
|
||||
private var informations = [SeismicNetworkTableViewCell.InformationType]()
|
||||
/// Index path of row with map expanded
|
||||
@@ -46,6 +60,8 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
performSegue(withIdentifier: Self.SegueIdentifierSettings, sender: nil)
|
||||
UserDefaults.standard.setValue(true, forKey: EQNUserDefaultKeyOneShotShowCountry)
|
||||
}
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(didReceiveDownloadCompleteNotification(_:)), name: .EQNDownloadDataDidComplete, object: nil)
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
@@ -60,14 +76,15 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
tableView?.estimatedRowHeight = 300.0;
|
||||
tableView?.rowHeight = UITableView.automaticDimension
|
||||
tableView?.register(SeismicNetworkTableViewCell.self, forCellReuseIdentifier: SeismicNetworkTableViewCell.Identifier)
|
||||
tableView?.register(SeismicNetworkAdvertiseTableViewCell.self, forCellReuseIdentifier: SeismicNetworkAdvertiseTableViewCell.Identifier)
|
||||
tableView?.emptyDataSetSource = self
|
||||
}
|
||||
|
||||
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
|
||||
switch segue.identifier {
|
||||
case Self.SegueIdentifierMap:
|
||||
if let seismic = sender as? EQNSisma, let navController = segue.destination as? UINavigationController, let controller = navController.viewControllers.first as? ReteSismiDettagliMappa {
|
||||
controller.sisma = seismic
|
||||
if let seismic = sender as? EQNSisma, let navController = segue.destination as? UINavigationController, let controller = navController.viewControllers.first as? SeismicNetworksMapDetailViewController {
|
||||
controller.seismic = seismic
|
||||
}
|
||||
case Self.SegueIdentifierFilters:
|
||||
if let controller = segue.destination as? SeismicFiltersViewController {
|
||||
@@ -90,13 +107,21 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Notifications
|
||||
|
||||
@objc func didReceiveDownloadCompleteNotification(_ sender: Notification) {
|
||||
self.openMapIndexPath = nil
|
||||
self.openWeatherIndexPath = nil
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.refreshUI()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
override func refreshUI() {
|
||||
super.refreshUI()
|
||||
|
||||
let allSeismics = EQNManager.manager().retiSismiche
|
||||
seismics = EQNSeismic.shared.filterSeismicList(allSeismics ?? [])
|
||||
private func refreshUI() {
|
||||
elaborateData()
|
||||
|
||||
if let saved = UserDefaults.standard.array(forKey: EQNUserDefaultKeySesmicInformations) as? [Int] {
|
||||
informations = saved.compactMap { SeismicNetworkTableViewCell.InformationType(rawValue: $0) }
|
||||
@@ -111,15 +136,24 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
tableView?.reloadData()
|
||||
}
|
||||
|
||||
private func loadAd() {
|
||||
adLoader.load(GADRequest())
|
||||
}
|
||||
|
||||
private func loadData(forced: Bool) {
|
||||
EQNManager.manager().refreshSeismicData(forced: forced)
|
||||
}
|
||||
|
||||
@objc override func didReceiveDownloadComplete(_ notification: Notification) {
|
||||
self.openMapIndexPath = nil
|
||||
self.openWeatherIndexPath = nil
|
||||
private func elaborateData() {
|
||||
// show filtered seismic based on user settings
|
||||
let allSeismics = EQNManager.manager().retiSismiche
|
||||
let filteredSeismics = EQNSeismic.shared.filterSeismicList(allSeismics ?? [])
|
||||
rows = filteredSeismics.map { .seismic($0) }
|
||||
|
||||
super.didReceiveDownloadComplete(notification)
|
||||
// if is not a pro user, show an advertise
|
||||
if !EQNPurchaseUtility.isProVersionEnabled() {
|
||||
loadAd()
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
@@ -150,30 +184,39 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
// MARK: - Table view delegate and data source
|
||||
|
||||
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
||||
seismics.count
|
||||
rows.count
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: SeismicNetworkTableViewCell.Identifier, for: indexPath) as! SeismicNetworkTableViewCell
|
||||
let seismic = seismics[indexPath.row]
|
||||
|
||||
var type = SeismicNetworkTableViewCell.DisplayType.normal
|
||||
if openMapIndexPath == indexPath {
|
||||
type = .mapExpanded
|
||||
} else if openWeatherIndexPath == indexPath {
|
||||
type = .weatherExpanded
|
||||
let row = rows[indexPath.row]
|
||||
switch row {
|
||||
case .seismic(let seismic):
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: SeismicNetworkTableViewCell.Identifier, for: indexPath) as! SeismicNetworkTableViewCell
|
||||
|
||||
var type = SeismicNetworkTableViewCell.DisplayType.normal
|
||||
if openMapIndexPath == indexPath {
|
||||
type = .mapExpanded
|
||||
} else if openWeatherIndexPath == indexPath {
|
||||
type = .weatherExpanded
|
||||
}
|
||||
|
||||
cell.configure(with: seismic, type: type, informations: informations)
|
||||
cell.delegate = self
|
||||
return cell
|
||||
case .advertise(let nativeAd):
|
||||
let cell = tableView.dequeueReusableCell(withIdentifier: SeismicNetworkAdvertiseTableViewCell.Identifier, for: indexPath) as! SeismicNetworkAdvertiseTableViewCell
|
||||
cell.loadNativeAd(nativeAd)
|
||||
return cell
|
||||
}
|
||||
|
||||
cell.configure(with: seismic, type: type, informations: informations)
|
||||
cell.delegate = self
|
||||
return cell
|
||||
}
|
||||
|
||||
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
let row = rows[indexPath.row]
|
||||
|
||||
let seismic = seismics[indexPath.row]
|
||||
performSegue(withIdentifier: Self.SegueIdentifierMap, sender: seismic)
|
||||
if case .seismic(let seismic) = row {
|
||||
tableView.deselectRow(at: indexPath, animated: true)
|
||||
performSegue(withIdentifier: Self.SegueIdentifierMap, sender: seismic)
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
@@ -183,7 +226,7 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
self.createCalendarEvent(for: seismic)
|
||||
} failure: {
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""),
|
||||
message: "Non è possibile aprire il calendario, assicurarsi di aver impostato i permessi corretti",
|
||||
message: NSLocalizedString("calendar_missing_permission", comment: ""),
|
||||
preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .default))
|
||||
self.present(alert, animated: true)
|
||||
@@ -231,16 +274,30 @@ class SeismicNetworksViewController: EQNBaseViewController, UITableViewDelegate,
|
||||
}
|
||||
}
|
||||
|
||||
extension SeismicNetworksViewController: GADNativeAdLoaderDelegate {
|
||||
func adLoader(_ adLoader: GADAdLoader, didReceive nativeAd: GADNativeAd) {
|
||||
print("[GADAdLoader] didReceive")
|
||||
|
||||
let adPosition = min(3, rows.count)
|
||||
rows.insert(.advertise(nativeAd), at: adPosition)
|
||||
tableView?.reloadData()
|
||||
}
|
||||
|
||||
func adLoader(_ adLoader: GADAdLoader, didFailToReceiveAdWithError error: Error) {
|
||||
// nope
|
||||
print("[GADAdLoader] didFailToReceiveAdWithError: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
extension SeismicNetworksViewController: SeismicNetworkTableViewCellDelegate {
|
||||
|
||||
func seismicNetworkCellDidTapShare(_ cell: SeismicNetworkTableViewCell) {
|
||||
guard let index = tableView?.indexPath(for: cell) else { return }
|
||||
guard let index = tableView?.indexPath(for: cell), case let .seismic(seismic) = rows[index.row] else { return }
|
||||
|
||||
// create a snapshot of the cell and share with default share sheet
|
||||
let snapshot = cell.createSnapshot()
|
||||
|
||||
// text to share with the snapshot
|
||||
let seismic = seismics[index.row]
|
||||
let shareHashtag = NSLocalizedString("share_hashtag", comment: "")
|
||||
let magnitude = String(format: "%.1f", seismic.magnitude.doubleValue)
|
||||
let location = seismic.place
|
||||
@@ -281,15 +338,14 @@ extension SeismicNetworksViewController: SeismicNetworkTableViewCellDelegate {
|
||||
}
|
||||
|
||||
func seismicNetworkCellDidTapMapDetail(_ cell: SeismicNetworkTableViewCell) {
|
||||
guard let index = tableView?.indexPath(for: cell) else { return }
|
||||
let seismic = seismics[index.row]
|
||||
guard let index = tableView?.indexPath(for: cell), case let .seismic(seismic) = rows[index.row] else { return }
|
||||
|
||||
performSegue(withIdentifier: Self.SegueIdentifierMap, sender: seismic)
|
||||
}
|
||||
|
||||
func seismicNetworkCellDidTapCalendar(_ cell: SeismicNetworkTableViewCell) {
|
||||
guard let index = tableView?.indexPath(for: cell) else { return }
|
||||
guard let index = tableView?.indexPath(for: cell), case let .seismic(seismic) = rows[index.row] else { return }
|
||||
|
||||
let seismic = seismics[index.row]
|
||||
openCalendar(for: seismic)
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -84,7 +84,7 @@ class SeismicSettingsViewController: UIViewController {
|
||||
|
||||
@IBAction func confirmCountryTapped(_ sender: UIButton) {
|
||||
guard let network = selectedNetwork else {
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione ", comment: ""),
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""),
|
||||
message: NSLocalizedString("Non hai seleziato nessuna nazione", comment: ""),
|
||||
preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("OK", comment: ""), style: .cancel, handler: { [unowned self] (action) in
|
||||
@@ -95,7 +95,7 @@ class SeismicSettingsViewController: UIViewController {
|
||||
}
|
||||
|
||||
// ask confirm to change settings for notifications
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione ", comment: ""),
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""),
|
||||
message: NSLocalizedString("official_select_message", comment: ""),
|
||||
preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Annulla", comment: ""), style: .cancel))
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
+ (void)saveSettings
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlInvioImpostazioniNotifiche] richiesta:impostazioniNotifiche success:^(id result){
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlInvioImpostazioniNotifiche] richiesta:EQNTipoChiamataImpostazioniNotifiche success:^(id result){
|
||||
NSLog(@"Settings saved successfully");
|
||||
} failure:^(NSError *error){
|
||||
NSLog(@"Settings saved failed. Error: %@", error.localizedDescription);
|
||||
|
||||
-1
@@ -8,7 +8,6 @@
|
||||
|
||||
#import "SettingsUserReportAlertsViewController.h"
|
||||
#import "EQNNotificheSegnalazioniUtente.h"
|
||||
#import "EQNUtility.h"
|
||||
|
||||
@interface SettingsUserReportAlertsViewController ()
|
||||
|
||||
|
||||
@@ -0,0 +1,252 @@
|
||||
//
|
||||
// AlertSimulatorViewController.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 14/11/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import MapKit
|
||||
|
||||
class AlertSimulatorViewController: UIViewController, MKMapViewDelegate {
|
||||
|
||||
struct MapCircle {
|
||||
let identifier: String
|
||||
let distance: CLLocationDistance
|
||||
let color: UIColor
|
||||
}
|
||||
|
||||
// MARK: - Internal
|
||||
|
||||
private let mapCircles = [
|
||||
MapCircle(identifier: "circle_internal", distance: 50_000, color: AppTheme.Colors.red),
|
||||
MapCircle(identifier: "circle_external", distance: 750_000, color: AppTheme.Colors.green)
|
||||
]
|
||||
|
||||
private lazy var viewfinderView: UIView = {
|
||||
let view = UIView()
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.backgroundColor = .clear
|
||||
view.isUserInteractionEnabled = false
|
||||
|
||||
// add central vertiacl and horizontal lines
|
||||
let viewfinderVertical = UIView()
|
||||
view.addSubview(viewfinderVertical)
|
||||
viewfinderVertical.translatesAutoresizingMaskIntoConstraints = false
|
||||
viewfinderVertical.backgroundColor = AppTheme.Colors.lightBlue
|
||||
viewfinderVertical.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
|
||||
viewfinderVertical.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
|
||||
viewfinderVertical.centerXAnchor.constraint(equalTo: view.centerXAnchor).isActive = true
|
||||
viewfinderVertical.widthAnchor.constraint(equalToConstant: 2.0).isActive = true
|
||||
|
||||
let viewfinderHorizontal = UIView()
|
||||
view.addSubview(viewfinderHorizontal)
|
||||
viewfinderHorizontal.translatesAutoresizingMaskIntoConstraints = false
|
||||
viewfinderHorizontal.backgroundColor = AppTheme.Colors.lightBlue
|
||||
viewfinderHorizontal.leadingAnchor.constraint(equalTo: view.leadingAnchor).isActive = true
|
||||
viewfinderHorizontal.trailingAnchor.constraint(equalTo: view.trailingAnchor).isActive = true
|
||||
viewfinderHorizontal.centerYAnchor.constraint(equalTo: view.centerYAnchor).isActive = true
|
||||
viewfinderHorizontal.heightAnchor.constraint(equalToConstant: 2.0).isActive = true
|
||||
|
||||
return view
|
||||
}()
|
||||
|
||||
private lazy var mapView: MKMapView = {
|
||||
let map = MKMapView()
|
||||
map.translatesAutoresizingMaskIntoConstraints = false
|
||||
map.showsUserLocation = true
|
||||
map.delegate = self
|
||||
return map
|
||||
}()
|
||||
|
||||
private lazy var calculateButton: UIButton = {
|
||||
let button = EQNRoundedButton(type: .custom)
|
||||
button.backgroundColor = .lightGray
|
||||
button.setTitleColor(AppTheme.Colors.darkGray, for: .normal)
|
||||
button.translatesAutoresizingMaskIntoConstraints = false
|
||||
button.setTitle(NSLocalizedString("globe_simulation_button", comment: "").uppercased(), for: .normal)
|
||||
button.addTarget(self, action: #selector(calculateTapped(_:)), for: .touchUpInside)
|
||||
return button
|
||||
}()
|
||||
|
||||
// MARK: - View Lifecycle
|
||||
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
|
||||
let closeButton = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(closeTapped(_:)))
|
||||
navigationItem.rightBarButtonItem = closeButton
|
||||
|
||||
setupUI()
|
||||
configureMap()
|
||||
}
|
||||
|
||||
override func viewWillAppear(_ animated: Bool) {
|
||||
super.viewWillAppear(animated)
|
||||
|
||||
// show an alert view functionality details
|
||||
let alert = UIAlertController(title: NSLocalizedString("main_simulator", comment: ""), message: NSLocalizedString("globe_simulation", comment: ""), preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("main_understood", comment: ""), style: .default))
|
||||
present(alert, animated: true)
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
private func setupUI() {
|
||||
view.addSubview(mapView)
|
||||
view.addSubview(viewfinderView)
|
||||
view.addSubview(calculateButton)
|
||||
|
||||
mapView.topAnchor.constraint(equalTo: view.topAnchor).isActive = true
|
||||
mapView.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true
|
||||
mapView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
|
||||
mapView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
|
||||
|
||||
viewfinderView.topAnchor.constraint(equalTo: mapView.topAnchor).isActive = true
|
||||
viewfinderView.bottomAnchor.constraint(equalTo: mapView.bottomAnchor).isActive = true
|
||||
viewfinderView.leftAnchor.constraint(equalTo: mapView.leftAnchor).isActive = true
|
||||
viewfinderView.rightAnchor.constraint(equalTo: mapView.rightAnchor).isActive = true
|
||||
|
||||
calculateButton.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 20.0).isActive = true
|
||||
calculateButton.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -20.0).isActive = true
|
||||
calculateButton.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -10.0).isActive = true
|
||||
calculateButton.heightAnchor.constraint(equalToConstant: 40.0).isActive = true
|
||||
}
|
||||
|
||||
private func configureMap() {
|
||||
guard let lastPosition = EQNUser.default().lastPosition else { return }
|
||||
|
||||
let span = MKCoordinateSpan(latitudeDelta: 2.0, longitudeDelta: 2.0)
|
||||
let region = MKCoordinateRegion(center: lastPosition.coordinate, span: span)
|
||||
mapView.setCenter(lastPosition.coordinate, animated: false)
|
||||
mapView.setRegion(region, animated: true)
|
||||
|
||||
mapCircles.forEach { (mapCircle) in
|
||||
addCircle(location: lastPosition, radius: mapCircle.distance, id: mapCircle.identifier)
|
||||
}
|
||||
}
|
||||
|
||||
private func addCircle(location: CLLocation, radius: CLLocationDistance, id: String) {
|
||||
let circle = MKCircle(center: location.coordinate, radius: radius)
|
||||
circle.title = id
|
||||
mapView.addOverlay(circle)
|
||||
}
|
||||
|
||||
// MARK: - Actions
|
||||
|
||||
@objc func closeTapped(_ sender: Any) {
|
||||
dismiss(animated: true)
|
||||
}
|
||||
|
||||
@objc func calculateTapped(_ sender: Any) {
|
||||
guard let lastPosition = EQNUser.default().lastPosition,
|
||||
let circleMin = mapCircles.sorted(by: { $0.distance < $1.distance }).first,
|
||||
let circleMax = mapCircles.sorted(by: { $0.distance > $1.distance }).first else { return }
|
||||
|
||||
let location = CLLocation(latitude: mapView.centerCoordinate.latitude, longitude: mapView.centerCoordinate.longitude)
|
||||
let distance = lastPosition.distance(from: location)
|
||||
|
||||
// check for a valid point selected by the user
|
||||
if distance < circleMin.distance || distance > circleMax.distance {
|
||||
let message = distance < circleMin.distance ? "globe_simulation_outside" : "globe_simulation_inside"
|
||||
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""), message: NSLocalizedString(message, comment: ""), preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: ""), style: .cancel, handler: nil))
|
||||
present(alert, animated: true)
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
let url = EQNGeneratoreURLServer.urlAlertSimulator()
|
||||
ServerRequest.default().inviaInformazioniAlServer(with: url, richiesta: .alertSimulator) { (result) in
|
||||
if let result = result as? String {
|
||||
DispatchQueue.main.async {
|
||||
self.elaborateServerResponse(result, distance: distance)
|
||||
}
|
||||
}
|
||||
} failure: { (error) in
|
||||
DispatchQueue.main.async {
|
||||
let alert = UIAlertController(title: NSLocalizedString("Attenzione", comment: ""), message: error?.localizedDescription, preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: ""), style: .cancel, handler: nil))
|
||||
self.present(alert, animated: true)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func elaborateServerResponse(_ response: String, distance: CLLocationDistance) {
|
||||
let isTop10k = EQNPurchaseUtility.isTop10kEnabled()
|
||||
let isTop100k = EQNPurchaseUtility.isTop100kEnabled()
|
||||
|
||||
// server response (like '3411#12')
|
||||
let split = response.split(separator: "#")
|
||||
|
||||
let people: Int
|
||||
let popleTop10k: Int
|
||||
if split.count > 1 {
|
||||
//caso top10k=0 e top100k=0
|
||||
people = Int(split[0]) ?? 0
|
||||
popleTop10k = Int(split[1]) ?? 0
|
||||
} else {
|
||||
//caso top10k=1 oppure top100k=1
|
||||
people = Int(split[0]) ?? 0
|
||||
popleTop10k = 0
|
||||
}
|
||||
|
||||
let distanceKm = distance / 1000
|
||||
let delay = round(Double(people) / 1000.0 * 0.15) //calcolo il ritardo di allerta dovuto alla coda di utenti
|
||||
let leadTime = round(Double(distanceKm) / 8.0 - 3.0) //calcolo il tempo di allerta teorico nel caso di 0 utenti in coda
|
||||
let actualTime = leadTime - delay //calcolo il tempo di allerta per l'utente
|
||||
|
||||
//il messaggio mostrato all'utente cambia in base al fatto di possedere un abbonamento ed al tempo di allerta calcolato
|
||||
//il messaggio include tag html perché cambio il colore di parte delle stringa, non so se si fa così anche in iOS
|
||||
var message = ""
|
||||
if (isTop10k) {
|
||||
if (people == 0) {
|
||||
message = String(format: NSLocalizedString("globe_simulation_message6", comment: ""), "TOP 10K", leadTime)
|
||||
} else {
|
||||
message = String(format: NSLocalizedString("globe_simulation_message4", comment: ""), "TOP 10K", leadTime, Double(people))
|
||||
}
|
||||
} else if (isTop100k) {
|
||||
message = String(format: NSLocalizedString("globe_simulation_message5", comment: ""), "TOP 100K", leadTime, Double(people), "TOP 10K")
|
||||
} else {
|
||||
if (leadTime / actualTime < 1.4) {
|
||||
message = String(format: NSLocalizedString("globe_simulation_message3", comment: ""), leadTime, Double(people), Double(popleTop10k))
|
||||
} else {
|
||||
if (actualTime > 0) {
|
||||
message = String(format: NSLocalizedString("globe_simulation_message1", comment: ""), leadTime, Double(people), actualTime, Double(popleTop10k))
|
||||
} else {
|
||||
let updatedActualTime = actualTime * -1;
|
||||
message = String(format: NSLocalizedString("globe_simulation_message2", comment: ""), leadTime, Double(people), updatedActualTime, Double(popleTop10k))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let alert = UIAlertController(title: NSLocalizedString("main_simulator", comment: ""), message: message, preferredStyle: .alert)
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("globe_simulation_priority", comment: ""), style: .default) { (action) in
|
||||
self.navigateToSubscriptions()
|
||||
})
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Ok", comment: ""), style: .cancel, handler: nil))
|
||||
present(alert, animated: true)
|
||||
}
|
||||
|
||||
private func navigateToSubscriptions() {
|
||||
let controller = SubscriptionsViewController.makeController()
|
||||
navigationController?.pushViewController(controller, animated: true)
|
||||
}
|
||||
|
||||
// MARK: MKMapViewDelegate
|
||||
|
||||
func mapView(_ mapView: MKMapView, rendererFor overlay: MKOverlay) -> MKOverlayRenderer {
|
||||
if let overlay = overlay as? MKCircle, let mapCircle = mapCircles.first(where: { $0.identifier == overlay.title }) {
|
||||
let circle = MKCircleRenderer(overlay: overlay)
|
||||
circle.strokeColor = mapCircle.color
|
||||
circle.fillColor = AppTheme.Colors.green.withAlphaComponent(0.1)
|
||||
circle.lineWidth = 2.0
|
||||
return circle
|
||||
}
|
||||
|
||||
return MKOverlayRenderer(overlay: overlay)
|
||||
}
|
||||
}
|
||||
@@ -35,9 +35,11 @@ static NSString * const EQNServerUrlDownloadRetiSismiche = @"https://srv.earthqu
|
||||
static NSString * const EQNServerUrlOfferTimeRemaining = @"https://srv.earthquakenetwork.it/distquake_download_offer_time_remaining.php";
|
||||
/// Recupera il numero di sottoscrizioni ancora disponibili per ogni prodotto
|
||||
static NSString * const EQNServerUrlAvailableSubscriptionsCounter = @"https://srv.earthquakenetwork.it/distquake_count_top_redis.php";
|
||||
/// Registra l'abbonamento acquistato dall'utente
|
||||
static NSString * const EQNServerUrlRegisterSubscription = @"https://srv.earthquakenetwork.it/distquake_upload_subscription.php";
|
||||
/// Carica le impostazioni delle notifiche definite dall'utente
|
||||
static NSString * const EQNServerUrlUploadSettings = @"https://srv.earthquakenetwork.it/distquake_upload_settings_ios.php";
|
||||
// URL registrazione server
|
||||
// URL EQNTipoChiamataRegistrazione server
|
||||
static NSString * const EQNServerUrlRegistration = @"https://srv.earthquakenetwork.it/distquake_upload_gcm_regid2.php";
|
||||
// URL posizione server
|
||||
static NSString * const EQNServerUrlUserLocation = @"https://srv.earthquakenetwork.it/distquake_upload_gcm_latlon.php";
|
||||
@@ -56,6 +58,8 @@ static NSString * const EQNServerUrlSendUserReport = @"https://srv.earthquakenet
|
||||
static NSString * const EQNServerUrlSendUserReportMessage = @"https://srv.earthquakenetwork.it/distquake_upload_manual_message.php";
|
||||
/// Effettua un test delle notifiche push
|
||||
static NSString * const EQNServerUrlTestAlarm = @"https://srv.earthquakenetwork.it/distquake_upload_testalarm.php";
|
||||
/// Simulatore per calcolo pre-allerta
|
||||
static NSString * const EQNServerUrlAlertSimulator = @"https://srv.earthquakenetwork.it/distquake_download_alertposition.php";
|
||||
|
||||
#pragma mark - UserDefaults Keys
|
||||
|
||||
@@ -63,13 +67,25 @@ static NSString * const EQNUserDefaultKeySesmicInformations = @"EQNetwork.Seismi
|
||||
static NSString * const EQNUserDefaultKeyOneShotShowCountry = @"EQNetwork.OneShot.CountrySelection";
|
||||
static NSString * const EQNUserDefaultLastLocation = @"EQNLast_Location";
|
||||
static NSString * const EQNUserDefaultSeismicNetworkCards = @"EQNData.RetiSismiche";
|
||||
/// Numero di aperture dell'app per sbloccare la versione Pro scontata
|
||||
static NSString * const EQNUserDefaultProDiscountOpenCounter = @"CONTEGGIO_APERTURE_PER_SCONTO";
|
||||
/// Prezzo scontato per la versione pro scaduto
|
||||
static NSString * const EQNUserDefaultProDiscountExpired = @"PREZZO_SCONTATO_SCADUTO";
|
||||
|
||||
#pragma mark - NSNotification
|
||||
|
||||
/// Notifica di fallimento registrazione al server (user_id non ricavato)
|
||||
static NSNotificationName const EQNServerRegistrationDidFailNotification = @"EQNServerRegistrationDidFailNotification";
|
||||
/// Notifica di cambio stato permesso di localizzazione
|
||||
static NSString * const EQNNotificationDidChangeAuthorizationStatus = @"EQNNotificationDidChangeAuthorizationStatus";
|
||||
static NSNotificationName const EQNAuthorizationStatusDidChangeNotification = @"EQNAuthorizationStatusDidChangeNotification";
|
||||
/// Notifica di completamento download dei dati
|
||||
static NSString * const EQNNotificationDidDownloadData = @"EQNNotificationDidDownloadData";
|
||||
static NSNotificationName const EQNDownloadDataDidCompleteNotification = @"EQNDownloadDataDidCompleteNotification";
|
||||
/// Notifica di acquisto in-app effettuato
|
||||
static NSNotificationName const EQNInAppPurchaseDidCompleteNotification = @"EQNInAppPurchaseDidCompleteNotification";
|
||||
/// Notifica di acquisto in-app fallito
|
||||
static NSNotificationName const EQNInAppPurchaseDidFailNotification = @"EQNInAppPurchaseDidFailNotification";
|
||||
/// Notifica di nessun acquisto trovato
|
||||
static NSNotificationName const EQNInAppPurchaseNoTransactionsNotification = @"EQNInAppPurchaseNoTransactionsNotification";
|
||||
|
||||
#pragma mark - Other constants
|
||||
|
||||
@@ -79,27 +95,14 @@ static NSTimeInterval const EQNSendReportDelayBetweenMessages = 5.0;
|
||||
/// Tempo di attesa (minuti) per l'invio di due commenti
|
||||
static NSTimeInterval const EQNSendReportDelayBetweenComments = 30.0;
|
||||
|
||||
// colori celle tableview rete sismi
|
||||
#define COLORE_CELLA_MAGNITUTE_LEGGERA [UIColor colorWithRed:208.0/255.0 green:234.0/255.0 blue:201.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_LEGGERA_ETI [UIColor colorWithRed:215.0/255.0 green:253.0/255.0 blue:210.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_MEDIA [UIColor colorWithRed:254.0/255.0 green:252.0/255.0 blue:203.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_MEDIA_ETI [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:245.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_FORTE [UIColor colorWithRed:254.0/255.0 green:186.0/255.0 blue:186.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_FORTE_ETI [UIColor colorWithRed:252.0/255.0 green:219.0/255.0 blue:219.0/255.0 alpha:1.0]
|
||||
#ifdef DEBUG
|
||||
static NSString * const EQNAdMobAppIdAdaptiveBanner = @"ca-app-pub-3940256099942544/2934735716"; // test
|
||||
static NSString * const EQNAdMobAppIdNativeBanner = @"ca-app-pub-0053870219990922/6195421224";
|
||||
#else
|
||||
static NSString * const EQNAdMobAppIdAdaptiveBanner = @"ca-app-pub-0053870219990922/3394298808";
|
||||
static NSString * const EQNAdMobAppIdNativeBanner = @"ca-app-pub-0053870219990922/6195421224";
|
||||
#endif
|
||||
|
||||
#define COLORE_CELLA_MAGNITUTE_FORTE_TESTO [UIColor colorWithRed:240.0/255.0 green:0.0/255.0 blue:14.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_MEDIA_TESTO [UIColor colorWithRed:238.0/255.0 green:185.0/255.0 blue:14.0/255.0 alpha:1.0]
|
||||
#define COLORE_CELLA_MAGNITUTE_LEGGERA_TESTO [UIColor colorWithRed:26.0/255.0 green:144.0/255.0 blue:20.0/255.0 alpha:1.0]
|
||||
|
||||
// rete Smartphone
|
||||
#define IDENTIFIER_ANNOTATION_RETESMARTPHONE @"IDENTIFIER_ANNOTATION_RETESMARTPHONE"
|
||||
// pastequakes
|
||||
#define IDENTIFIER_ANNOTATION_PASTQUAKES @"IDENTIFIER_ANNOTATION_PASTQUAKES"
|
||||
|
||||
// sismi
|
||||
#define IDENTIFIER_ANNOTATION_SISMI @"IDENTIFIER_ANNOTATION_SISMI"
|
||||
// rete smartphone notifiche
|
||||
#define IDENTIFIER_ANNOTATION_RS_NOTIFICA @"IDENTIFIER_ANNOTATION_RS_NOTIFICA"
|
||||
|
||||
// filtriMappaTime
|
||||
typedef enum : NSInteger {
|
||||
@@ -123,30 +126,29 @@ typedef enum : NSInteger {
|
||||
} EQNTipoDettagliMappa;
|
||||
|
||||
|
||||
// Chiave googleMaps
|
||||
|
||||
#define GOOGLE_MAP_KEY @"AIzaSyDc2V2vpBmbSnAisiN18rY17Dm7lzVWNAg"
|
||||
|
||||
#define MESSAGGIO @"MESSAGGIO_ERRORE"
|
||||
|
||||
typedef enum : NSInteger {
|
||||
registrazione = 0,
|
||||
posizione,
|
||||
calibrazione,
|
||||
rilevamento,
|
||||
downloadDati,
|
||||
areaCheck,
|
||||
pastquakes,
|
||||
utentiDisponibili,
|
||||
tempoDisponibile,
|
||||
segnalazioneManuale,
|
||||
tsunami,
|
||||
segnalazzioneTerremoto,
|
||||
commentoTerremoto,
|
||||
impostazioniNotifiche,
|
||||
offerTimeRemaining,
|
||||
alertPushTest
|
||||
} EQNTipoChiamata;
|
||||
/// Sections inside the app
|
||||
typedef NS_ENUM(NSInteger, EQNTipoChiamata) {
|
||||
EQNTipoChiamataRegistrazione = 0,
|
||||
EQNTipoChiamataPosizione,
|
||||
EQNTipoChiamataCalibrazione,
|
||||
EQNTipoChiamataRilevamento,
|
||||
EQNTipoChiamataDownloadDati,
|
||||
EQNTipoChiamataAreaCheck,
|
||||
EQNTipoChiamataPastquakes,
|
||||
EQNTipoChiamataUtentiDisponibili,
|
||||
EQNTipoChiamataTempoDisponibile,
|
||||
EQNTipoChiamataSegnalazioneManuale,
|
||||
EQNTipoChiamataTsunami,
|
||||
EQNTipoChiamataSegnalazioneTerremoto,
|
||||
EQNTipoChiamataCommentoTerremoto,
|
||||
EQNTipoChiamataImpostazioniNotifiche,
|
||||
EQNTipoChiamataOfferTimeRemaining,
|
||||
EQNTipoChiamataRegisterSubscription,
|
||||
EQNTipoChiamataAlertPushTest,
|
||||
EQNTipoChiamataAlertSimulator
|
||||
};
|
||||
|
||||
|
||||
// chiavi rMax e rMin
|
||||
@@ -165,12 +167,13 @@ typedef enum : NSInteger {
|
||||
#define SECONDI_RILIEVO 3
|
||||
// Soglia deviazione standard se superata lo stato del rilievo è positivo altrimenti negativo
|
||||
#define SOGLIA_DEVIAZIONE_RILIEVO 1.8
|
||||
|
||||
// stato rilievo
|
||||
// il parametro viene inviato al server e_t1
|
||||
typedef enum : NSInteger {
|
||||
negativo = 0,
|
||||
positivo
|
||||
} EQNRilevamentoSoglia;
|
||||
typedef NS_ENUM(NSInteger, EQNRilevamentoSoglia) {
|
||||
EQNRilevamentoSogliaNegativo = 0,
|
||||
EQNRilevamentoSogliaPositivo
|
||||
};
|
||||
|
||||
//////////////////////////////////////// CALIBRAZIONE ////////////////////////////////////////
|
||||
// secondi durata calibrazione
|
||||
@@ -238,17 +241,6 @@ typedef enum : NSInteger {
|
||||
#define TEMPO_VISUALIZZAZIONE_NOTIFICA 10800
|
||||
|
||||
|
||||
// AD MOB
|
||||
//ADMOB_APP_ID
|
||||
#define EQN_ADMOB_APP_IDA @"ca-app-pub-0053870219990922~2021960172"
|
||||
#define EQN_ADMOB_ANNUNCIO_IDA @"ca-app-pub-0053870219990922/3394298808"
|
||||
#define EQN_ADMOB_ANNUNCIO_IDA_TEST @"ca-app-pub-3940256099942544/2934735716"
|
||||
|
||||
// ACQUISTI IN APP
|
||||
#define CONTEGGIO_APERTURE_PER_SCONTO @"CONTEGGIO_APERTURE_PER_SCONTO"
|
||||
#define PREZZO_SCONTATO_SCADUTO @"PREZZO_SCONTATO_SCADUTO"
|
||||
#define IAPHelperPurchaseNotification @"IAPHelperPurchaseNotification"
|
||||
|
||||
// FILTRO ENTI
|
||||
#define EQN_MAGNITUDO_MINIMA @"EQN_MAGNITUDO_MINIMA"
|
||||
#define EQN_DISTANZA_MASSIMA @"EQN_DISTANZA_MASSIMA"
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
#import "EQNNotificheReteSismiche.h"
|
||||
#import "EQNSisma.h"
|
||||
#import "EQNBaseViewController.h"
|
||||
#import "ReteSismiDettagliMappa.h"
|
||||
#import "SettingsBaseViewController.h"
|
||||
#import "PastquakesAnnotation.h"
|
||||
#import "EQNMapAnnotationPastquakes.h"
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "ServerRequest.h"
|
||||
#import "EQNMapAnnotationSeismic.h"
|
||||
|
||||
#import "GADTTemplateView.h"
|
||||
#import "GADTMediumTemplateView.h"
|
||||
|
||||
@@ -43,6 +43,13 @@
|
||||
<string> Ci occorre la tua posizione per inviare messaggi precisi in caso di terremoto</string>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>L'accesso alla libreria è richiesto per poter salvare le immagini generate dall'app</string>
|
||||
<key>SKAdNetworkItems</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>SKAdNetworkIdentifier</key>
|
||||
<string>cstr6suwn9.skadnetwork</string>
|
||||
</dict>
|
||||
</array>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>audio</string>
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
//
|
||||
// StoryboardInitializable.swift
|
||||
//
|
||||
// Created by Busi Andrea on 10/11/2020.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
protocol StoryboardInitializable where Self: UIViewController {
|
||||
static var storyboardName: String { get }
|
||||
static var storyboardControllerId: String { get }
|
||||
|
||||
static func makeController() -> Self
|
||||
}
|
||||
|
||||
extension StoryboardInitializable {
|
||||
static func makeController() -> Self {
|
||||
let storyboard = UIStoryboard(name: storyboardName, bundle: Bundle(for: Self.self))
|
||||
guard let controller = storyboard.instantiateViewController(withIdentifier: storyboardControllerId) as? Self else {
|
||||
fatalError("Unable to instantiate controller with anem \(storyboardControllerId)")
|
||||
}
|
||||
return controller
|
||||
}
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
//
|
||||
// EQNAdsUtility.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 15/10/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
@import GoogleMobileAds;
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNAdsUtility : NSObject
|
||||
|
||||
/// Creates Ad-sense banner to show on a given controller
|
||||
/// This method returns nil if the user has a Pro version, no banner has to be shown
|
||||
/// @param controller Controller
|
||||
/// @param isButton Is button
|
||||
+ (nullable GADBannerView *)ottieniBannerWithController:(UIViewController *)controller position:(BOOL)isButton;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,45 +0,0 @@
|
||||
//
|
||||
// EQNAdsUtility.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 15/10/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQNAdsUtility.h"
|
||||
|
||||
@implementation EQNAdsUtility
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
+ (GADBannerView *)ottieniBannerWithController:(UIViewController *)controller position:(BOOL)isButton
|
||||
{
|
||||
if ([EQNPurchaseUtility isProVersionEnabled]) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
GADBannerView *bannerView = [[GADBannerView alloc]
|
||||
initWithAdSize:kGADAdSizeBanner];
|
||||
bannerView.adUnitID = EQN_ADMOB_ANNUNCIO_IDA;
|
||||
bannerView.rootViewController = controller;
|
||||
bannerView.backgroundColor = [UIColor whiteColor];
|
||||
[bannerView loadRequest:[GADRequest request]];
|
||||
[self addBanner:bannerView toController:controller isTopAnchored:isButton];
|
||||
|
||||
return bannerView;
|
||||
}
|
||||
|
||||
#pragma mark - Private
|
||||
|
||||
+ (void)addBanner:(UIView *)bannerView toController:(UIViewController *)controller isTopAnchored:(BOOL)isButton
|
||||
{
|
||||
bannerView.translatesAutoresizingMaskIntoConstraints = NO;
|
||||
[controller.view addSubview:bannerView];
|
||||
|
||||
[[bannerView.centerXAnchor constraintEqualToAnchor:controller.view.centerXAnchor] setActive:YES];
|
||||
NSLayoutAnchor *parentAnchor = isButton ? controller.view.safeAreaLayoutGuide.bottomAnchor : controller.view.safeAreaLayoutGuide.topAnchor;
|
||||
NSLayoutAnchor *bannerAnchor = isButton ? bannerView.bottomAnchor : bannerView.topAnchor;
|
||||
[[bannerAnchor constraintEqualToAnchor:parentAnchor] setActive:YES];
|
||||
}
|
||||
|
||||
@end
|
||||
+6
-2
@@ -3,16 +3,20 @@
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 09/10/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNAreaCheck : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString *total;
|
||||
@property (nonatomic, strong) NSString *active;
|
||||
|
||||
-(id)initWithInfo:(NSArray *)info;
|
||||
- (instancetype)initWithInfo:(NSArray *)info;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+17
-15
@@ -3,37 +3,39 @@
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 09/10/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQNAreaCheck.h"
|
||||
|
||||
@implementation EQNAreaCheck
|
||||
|
||||
-(id)initWithInfo:(NSArray *)info{
|
||||
|
||||
#pragma mark - Init
|
||||
|
||||
- (instancetype)initWithInfo:(NSArray *)info
|
||||
{
|
||||
self = [super init];
|
||||
if(self != nil) {
|
||||
|
||||
_total = info[0][@"total"];
|
||||
_active = info[1][@"active"];
|
||||
|
||||
if (self) {
|
||||
self.total = info[0][@"total"];
|
||||
self.active = info[1][@"active"];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
- (void)encodeWithCoder:(NSCoder *)encoder {
|
||||
//Encode properties, other class variables, etc
|
||||
|
||||
#pragma mark - NSEncoding
|
||||
|
||||
- (void)encodeWithCoder:(NSCoder *)encoder
|
||||
{
|
||||
[encoder encodeObject:self.total forKey:@"total"];
|
||||
[encoder encodeObject:self.active forKey:@"active"];
|
||||
|
||||
}
|
||||
|
||||
- (id)initWithCoder:(NSCoder *)decoder {
|
||||
if((self = [super init])) {
|
||||
//decode properties, other class vars
|
||||
- (id)initWithCoder:(NSCoder *)decoder
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.total = [decoder decodeObjectForKey:@"total"];
|
||||
self.active = [decoder decodeObjectForKey:@"active"];
|
||||
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -20,13 +20,13 @@ public class EQNPurchaseUtility: NSObject {
|
||||
/// If zero, no discounted price is available
|
||||
/// - Parameter completion: Completion
|
||||
static func offerTimeRemaining(completion: @escaping (_ timeRemaining: Int) -> Void) {
|
||||
let appOpenCounter = UserDefaults.standard.integer(forKey:CONTEGGIO_APERTURE_PER_SCONTO)
|
||||
let appOpenCounter = UserDefaults.standard.integer(forKey:EQNUserDefaultProDiscountOpenCounter)
|
||||
if appOpenCounter < Self.AppOpenCountForDiscount {
|
||||
completion(0)
|
||||
return
|
||||
}
|
||||
|
||||
let discountExpired = UserDefaults.standard.bool(forKey: PREZZO_SCONTATO_SCADUTO)
|
||||
let discountExpired = UserDefaults.standard.bool(forKey: EQNUserDefaultProDiscountExpired)
|
||||
if discountExpired {
|
||||
completion(0)
|
||||
return
|
||||
@@ -34,7 +34,7 @@ public class EQNPurchaseUtility: NSObject {
|
||||
|
||||
EQNUser.default().downloadOfferTimeRemaining { (timeOffer) in
|
||||
if timeOffer == 0 {
|
||||
UserDefaults.standard.set(true, forKey: PREZZO_SCONTATO_SCADUTO)
|
||||
UserDefaults.standard.set(true, forKey: EQNUserDefaultProDiscountExpired)
|
||||
}
|
||||
|
||||
let timeInHours = timeOffer / 60
|
||||
@@ -65,11 +65,23 @@ public class EQNPurchaseUtility: NSObject {
|
||||
/// Check if user has bought pro app version
|
||||
/// Pro version is enabled also if a yearly subscription is enabled
|
||||
@objc public static func isProVersionEnabled() -> Bool {
|
||||
var hasProVersion = false
|
||||
VersioneProProducts.Identifier.identifierForProVersion.forEach { (identifier) in
|
||||
hasProVersion = hasProVersion || UserDefaults.standard.bool(forKey: identifier)
|
||||
VersioneProProducts.Identifier.identifierForProVersion.reduce(false) { (result, identifier) -> Bool in
|
||||
return result || UserDefaults.standard.bool(forKey: identifier)
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if user has bought Top 10k subscription
|
||||
@objc public static func isTop10kEnabled() -> Bool {
|
||||
VersioneProProducts.Identifier.identifiersForTop10k.reduce(false) { (result, identifier) -> Bool in
|
||||
return result || UserDefaults.standard.bool(forKey: identifier)
|
||||
}
|
||||
}
|
||||
|
||||
/// Check if user has bought Top 100k subscription
|
||||
@objc public static func isTop100kEnabled() -> Bool {
|
||||
VersioneProProducts.Identifier.identifiersForTop100k.reduce(false) { (result, identifier) -> Bool in
|
||||
return result || UserDefaults.standard.bool(forKey: identifier)
|
||||
}
|
||||
return hasProVersion
|
||||
}
|
||||
|
||||
/// Remove saved in-app purchases flags.
|
||||
@@ -78,13 +90,13 @@ public class EQNPurchaseUtility: NSObject {
|
||||
VersioneProProducts.Identifier.identifiers.forEach { (identifier) in
|
||||
UserDefaults.standard.removeObject(forKey: identifier)
|
||||
}
|
||||
NotificationCenter.default.post(name: .IAPHelperPurchaseNotification, object: nil)
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseDidComplete, object: nil)
|
||||
}
|
||||
|
||||
/// Use to simulate the purchase of the Pro version
|
||||
@objc public static func simulateProPurchase(identifier: String) {
|
||||
// store and notify
|
||||
UserDefaults.standard.set(true, forKey: identifier)
|
||||
NotificationCenter.default.post(name: .IAPHelperPurchaseNotification, object: identifier)
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseDidComplete, object: identifier)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,57 @@
|
||||
//
|
||||
// EQNReteSmartphone.swift
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Busi Andrea on 08/12/2020.
|
||||
// Copyright © 2020 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
import Foundation
|
||||
|
||||
|
||||
@objc
|
||||
class EQNReteSmartphone: NSObject {
|
||||
@objc let counterLastDayAlerts: Int
|
||||
@objc let counterTotalAlerts: Int
|
||||
@objc let counterSmartphones: Int
|
||||
@objc let manualGreen: Int
|
||||
@objc let manualYellow: Int
|
||||
@objc let manualRed: Int
|
||||
@objc let lastSubscriptionDiff: Int
|
||||
@objc let subscriptionsDiscounted: Bool
|
||||
|
||||
// MARK: - Init
|
||||
|
||||
@objc init(info: [[String: Any]]) {
|
||||
// merge array in a single dictionary
|
||||
let allValues = info.reduce([:]) { (result, dictionary) -> [String: Any] in
|
||||
return result.merging(dictionary, uniquingKeysWith: { (_, new) in new })
|
||||
}
|
||||
|
||||
self.counterLastDayAlerts = Self.getValue(from: allValues, for: "eq")
|
||||
self.counterTotalAlerts = Self.getValue(from: allValues, for: "eq_p")
|
||||
self.counterSmartphones = Self.getValue(from: allValues, for: "green")
|
||||
self.manualGreen = Self.getValue(from: allValues, for: "g_man")
|
||||
self.manualYellow = Self.getValue(from: allValues, for: "y_man")
|
||||
self.manualRed = Self.getValue(from: allValues, for: "r_man")
|
||||
self.lastSubscriptionDiff = Self.getValue(from: allValues, for: "diff")
|
||||
let subscriptionsDiscounted = Self.getValue(from: allValues, for: "st")
|
||||
self.subscriptionsDiscounted = subscriptionsDiscounted == 1
|
||||
|
||||
super.init()
|
||||
}
|
||||
|
||||
// MARK: - Private
|
||||
|
||||
/// This method helps to extract an int value from the received values (where data are both strings and integers).
|
||||
/// If convertion is not possible, it will return zero.
|
||||
private static func getValue(from values: [String: Any], for key: String) -> Int {
|
||||
if let intValue = values[key] as? Int {
|
||||
return intValue
|
||||
}
|
||||
if let stringValue = values[key] as? String, let intValue = Int(stringValue) {
|
||||
return intValue
|
||||
}
|
||||
return 0
|
||||
}
|
||||
}
|
||||
+1
@@ -27,6 +27,7 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
- (void)inviaPosizioneServer;
|
||||
- (void)saveUserInfo;
|
||||
- (void)removeUser;
|
||||
- (void)verificaRegistrazione;
|
||||
|
||||
- (void)downloadOfferTimeRemainingWithCompletion:(timeRemainingCompletion)completionHandler;
|
||||
|
||||
+34
-21
@@ -8,12 +8,11 @@
|
||||
|
||||
#import "EQNUser.h"
|
||||
#import "Costanti.h"
|
||||
#import "EQMAccelerometroManager.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
#import "ServerRequest.h"
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "EQNUtility.h"
|
||||
#import "EQNManager.h"
|
||||
#import <CoreLocation/CoreLocation.h>
|
||||
|
||||
|
||||
@implementation EQNUser
|
||||
@@ -36,38 +35,51 @@
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.tokenUser = [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN_USER];
|
||||
_tokenUser = [[NSUserDefaults standardUserDefaults] objectForKey:TOKEN_USER];
|
||||
id savedUserId = [[NSUserDefaults standardUserDefaults] objectForKey:USER_ID];
|
||||
self.user_ID = [self convertUserIdIntoString:savedUserId];
|
||||
_user_ID = [self convertUserIdIntoString:savedUserId];
|
||||
|
||||
NSArray *lastPosArray = [EQNUtility loadArrayOfClass:[CLLocation class] fromUserDefaultsForKey:EQNUserDefaultLastLocation];
|
||||
if (lastPosArray.count > 0) {
|
||||
self.lastPosition = [lastPosArray lastObject];
|
||||
_lastPosition = [lastPosArray lastObject];
|
||||
}
|
||||
|
||||
self.registrato = NO;
|
||||
if (self.user_ID) {
|
||||
self.registrato = YES;
|
||||
_registrato = NO;
|
||||
if (_user_ID) {
|
||||
_registrato = YES;
|
||||
}
|
||||
|
||||
[[EQMAccelerometroManager sharedInstance] addObserver:(id)self
|
||||
[[EQNAccelerometroManager sharedInstance] addObserver:(id)self
|
||||
forKeyPath:@"currentLocation"
|
||||
options:NSKeyValueObservingOptionNew
|
||||
context:nil];
|
||||
|
||||
[[EQMAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
[[EQNAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Accessories
|
||||
|
||||
- (void)setTokenUser:(NSString *)tokenUser
|
||||
{
|
||||
// token could be retrieved after some times
|
||||
// thanks to this, we force the server registration when the token is received
|
||||
_tokenUser = tokenUser;
|
||||
[[NSUserDefaults standardUserDefaults] setObject:tokenUser forKey:TOKEN_USER];
|
||||
[self verificaRegistrazione];
|
||||
}
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
- (void)saveUserInfo
|
||||
{
|
||||
[[NSUserDefaults standardUserDefaults] setObject:self.tokenUser forKey:TOKEN_USER];
|
||||
[[NSUserDefaults standardUserDefaults] setObject:self.user_ID forKey:USER_ID];
|
||||
NSArray *lastPosiArray = @[self.lastPosition];
|
||||
[EQNUtility storeArray:lastPosiArray toUserDefaultForKey:EQNUserDefaultLastLocation];
|
||||
if (self.lastPosition) {
|
||||
NSArray *lastPosiArray = @[self.lastPosition];
|
||||
[EQNUtility storeArray:lastPosiArray toUserDefaultForKey:EQNUserDefaultLastLocation];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)removeUser
|
||||
@@ -84,34 +96,35 @@
|
||||
if ([keyPath isEqualToString:@"currentLocation"]) {
|
||||
// do some stuff
|
||||
if (self.lastPosition) {
|
||||
self.distanza = [self.lastPosition distanceFromLocation:[EQMAccelerometroManager sharedInstance].currentLocation];
|
||||
self.distanza = [self.lastPosition distanceFromLocation:[EQNAccelerometroManager sharedInstance].currentLocation];
|
||||
}
|
||||
self.lastPosition = [EQMAccelerometroManager sharedInstance].currentLocation;
|
||||
self.lastPosition = [EQNAccelerometroManager sharedInstance].currentLocation;
|
||||
[self verificaRegistrazione];
|
||||
|
||||
if (![EQNManager defaultManager].isBackground)
|
||||
[[EQMAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
[[EQNAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)verificaRegistrazione
|
||||
{
|
||||
if (!self.user_ID && self.tokenUser)
|
||||
if (!self.user_ID && self.tokenUser) {
|
||||
[self inviaregistrazioneServer:self.tokenUser withPosition:self.lastPosition];
|
||||
|
||||
else
|
||||
} else {
|
||||
[self inviaPosizioneServer];
|
||||
}
|
||||
}
|
||||
|
||||
- (void)inviaregistrazioneServer:(NSString *)token withPosition:(CLLocation *)location
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlRegistrazione] richiesta:registrazione success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlRegistrazione] richiesta:EQNTipoChiamataRegistrazione success:^(id result) {
|
||||
|
||||
self.user_ID = [self convertUserIdIntoString:result];
|
||||
[self saveUserInfo];
|
||||
|
||||
} failure:^(NSError *errore) {
|
||||
NSLog(@"USER_ID Error %@", errore);
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:EQNServerRegistrationDidFailNotification object:nil];
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -119,7 +132,7 @@
|
||||
{
|
||||
NSLog(@"URLPosizione %@", [EQNGeneratoreURLServer urlPosizione]);
|
||||
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlPosizione] richiesta:posizione success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[EQNGeneratoreURLServer urlPosizione] richiesta:EQNTipoChiamataPosizione success:^(id result) {
|
||||
|
||||
NSLog(@"inviato");
|
||||
|
||||
@@ -131,7 +144,7 @@
|
||||
- (void)downloadOfferTimeRemainingWithCompletion:(_Nonnull timeRemainingCompletion)completionHandler
|
||||
{
|
||||
NSURL *url = [EQNGeneratoreURLServer urlDownloadOfferTimeRemaining];
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:offerTimeRemaining success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataOfferTimeRemaining success:^(id result) {
|
||||
NSInteger timeRemaining = 0;
|
||||
if ([result isKindOfClass:[NSNumber class]]) {
|
||||
NSNumber *timeRemainingNumber = (NSNumber *)result;
|
||||
@@ -59,6 +59,12 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
/// @param keyName Key of NSUserDefault to retrieve
|
||||
+ (nullable NSDictionary *)loadDictionaryFromUserDefaultsForKey:(NSString *)keyName;
|
||||
|
||||
/// Calculate impact time from a received push notification
|
||||
/// @param info Payload of a received notification
|
||||
/// @return Impact time
|
||||
+ (nullable NSDate *)calculateUserSeismicTimestampFromUserInfo:(NSDictionary *)info;
|
||||
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
|
||||
@@ -200,4 +200,39 @@
|
||||
return dictionary;
|
||||
}
|
||||
|
||||
#pragma mark - Notifications
|
||||
|
||||
+ (nullable NSDate *)calculateUserSeismicTimestampFromUserInfo:(NSDictionary *)info
|
||||
{
|
||||
// dobbiamo calcolare l'ora in cui il sisma arriverà nella posizione dell'utente
|
||||
// per fare questo, il calcolo sarà:
|
||||
// timestamp sisma + warning time
|
||||
|
||||
// ultima posizione nota dell'utente
|
||||
CLLocationManager *manager = [[CLLocationManager alloc] init];
|
||||
CLLocation *lastUserLocation = manager.location;
|
||||
if (!lastUserLocation) {
|
||||
return nil;
|
||||
}
|
||||
|
||||
// posizione sisma
|
||||
double latitude = [info[@"latitude"] doubleValue];
|
||||
double longitude = [info[@"longitude"] doubleValue];
|
||||
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
|
||||
|
||||
// distanza tra sisma e utente (in km)
|
||||
CLLocationDistance distance = [lastUserLocation distanceFromLocation:location];
|
||||
double userDistance = distance/1000;
|
||||
|
||||
// calcoliamo warning_time
|
||||
double waveSpeed = [info[@"wave_speed"] doubleValue];
|
||||
double warningTime = round(userDistance/waveSpeed - 5);
|
||||
|
||||
// aggiungiamo il warning time al timestamp del sisma
|
||||
NSDate *seismicDate = [EQNUtility getDateFromString:info[@"datetime"]];
|
||||
NSDate *userSeismicDate = [seismicDate dateByAddingTimeInterval:warningTime];
|
||||
|
||||
return userSeismicDate;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -31,11 +31,6 @@ import StoreKit
|
||||
public typealias ProductIdentifier = String
|
||||
public typealias ProductsRequestCompletionHandler = (_ success: Bool, _ products: [SKProduct]?) -> Void
|
||||
|
||||
extension Notification.Name {
|
||||
static let IAPHelperPurchaseNotification = Notification.Name("IAPHelperPurchaseNotification")
|
||||
static let IAPHelperPurchaseNotificationFail = Notification.Name("IAPHelperPurchaseNotificationFail")
|
||||
|
||||
}
|
||||
|
||||
open class IAPHelper: NSObject {
|
||||
|
||||
@@ -83,11 +78,9 @@ extension IAPHelper {
|
||||
}
|
||||
|
||||
public func buyProduct(_ product: SKProduct) {
|
||||
|
||||
print("Buying \(product.productIdentifier)...")
|
||||
print("[IAPHelper] Buying product \(product.productIdentifier)...")
|
||||
let payment = SKPayment(product: product)
|
||||
SKPaymentQueue.default().add(payment)
|
||||
|
||||
}
|
||||
|
||||
public func isProductPurchased(_ productIdentifier: ProductIdentifier) -> Bool {
|
||||
@@ -108,23 +101,17 @@ extension IAPHelper {
|
||||
extension IAPHelper: SKProductsRequestDelegate {
|
||||
|
||||
public func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
|
||||
print("[IAPHelper] Loaded list of products...")
|
||||
|
||||
let products = response.products
|
||||
products.forEach { (p) in
|
||||
print("[IAPHelper] Found product: \(p.productIdentifier) \(p.localizedTitle) \(p.price.floatValue)")
|
||||
}
|
||||
|
||||
print("[IAPHelper] Products loaded (count: \(response.products.count))")
|
||||
|
||||
// this protocol method is not guaranteed to be dispatched on main thread
|
||||
DispatchQueue.main.async {
|
||||
self.productsRequestCompletionHandler?(true, products)
|
||||
self.productsRequestCompletionHandler?(true, response.products)
|
||||
self.clearRequestAndHandler()
|
||||
}
|
||||
}
|
||||
|
||||
public func request(_ request: SKRequest, didFailWithError error: Error) {
|
||||
print("[IAPHelper] Failed to load list of products.")
|
||||
print("[IAPHelper] Error: \(error.localizedDescription)")
|
||||
print("[IAPHelper] Failed to load list of products (error: \(error.localizedDescription))")
|
||||
|
||||
// this protocol method is not guaranteed to be dispatched on main thread
|
||||
DispatchQueue.main.async {
|
||||
@@ -143,18 +130,29 @@ extension IAPHelper: SKProductsRequestDelegate {
|
||||
|
||||
extension IAPHelper: SKPaymentTransactionObserver {
|
||||
|
||||
public func paymentQueueRestoreCompletedTransactionsFinished(_ queue: SKPaymentQueue) {
|
||||
print("[IAPHelper] Restore transaction completed")
|
||||
if queue.transactions.count == 0 {
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseNoTransactions, object: nil)
|
||||
}
|
||||
}
|
||||
|
||||
public func paymentQueue(_ queue: SKPaymentQueue, restoreCompletedTransactionsFailedWithError error: Error) {
|
||||
print("[IAPHelper] Restore transaction failed (error : \(error.localizedDescription))")
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseDidFail, object: nil)
|
||||
}
|
||||
|
||||
public func paymentQueue(_ queue: SKPaymentQueue, updatedTransactions transactions: [SKPaymentTransaction]) {
|
||||
print("[IAPHelper] Updated transactions (count: \(transactions.count))")
|
||||
|
||||
for transaction in transactions {
|
||||
switch (transaction.transactionState) {
|
||||
case .purchased:
|
||||
complete(transaction: transaction)
|
||||
break
|
||||
handlePurchased(transaction: transaction)
|
||||
case .failed:
|
||||
fail(transaction: transaction)
|
||||
break
|
||||
handleFailed(transaction: transaction)
|
||||
case .restored:
|
||||
restore(transaction: transaction)
|
||||
break
|
||||
handleRestored(transaction: transaction)
|
||||
case .deferred:
|
||||
break
|
||||
case .purchasing:
|
||||
@@ -165,32 +163,38 @@ extension IAPHelper: SKPaymentTransactionObserver {
|
||||
}
|
||||
}
|
||||
|
||||
private func complete(transaction: SKPaymentTransaction) {
|
||||
|
||||
print("complete...")
|
||||
private func handlePurchased(transaction: SKPaymentTransaction) {
|
||||
print("[IAPHelper] Handle purchased transaction (product: \(transaction.payment.productIdentifier))")
|
||||
deliverPurchaseNotificationFor(identifier: transaction.payment.productIdentifier)
|
||||
SKPaymentQueue.default().finishTransaction(transaction)
|
||||
|
||||
// register subscription
|
||||
serverPurchaseRegistration(for: transaction.payment.productIdentifier, transactionId:transaction.transactionIdentifier)
|
||||
}
|
||||
|
||||
private func restore(transaction: SKPaymentTransaction) {
|
||||
guard let productIdentifier = transaction.original?.payment.productIdentifier else { return }
|
||||
private func handleRestored(transaction: SKPaymentTransaction) {
|
||||
guard let productIdentifier = transaction.original?.payment.productIdentifier else {
|
||||
print("[IAPHelper] Handle restored transaction falied, cannot retrieve productIdentifier")
|
||||
return
|
||||
}
|
||||
|
||||
print("restore... \(productIdentifier)")
|
||||
print("[IAPHelper] Handle restored transaction (product: \(productIdentifier))")
|
||||
deliverPurchaseNotificationFor(identifier: productIdentifier)
|
||||
SKPaymentQueue.default().finishTransaction(transaction)
|
||||
|
||||
// register subscription
|
||||
serverPurchaseRegistration(for: productIdentifier, transactionId: transaction.transactionIdentifier)
|
||||
}
|
||||
|
||||
private func fail(transaction: SKPaymentTransaction) {
|
||||
|
||||
print("fail...")
|
||||
private func handleFailed(transaction: SKPaymentTransaction) {
|
||||
print("[IAPHelper] Handle failed transaction (product: \(transaction.payment.productIdentifier))")
|
||||
if let transactionError = transaction.error as NSError?,
|
||||
let localizedDescription = transaction.error?.localizedDescription,
|
||||
transactionError.code != SKError.paymentCancelled.rawValue {
|
||||
print("Transaction Error: \(localizedDescription)")
|
||||
|
||||
print("[IAPHelper] Handle failed transaction error: \(localizedDescription)")
|
||||
}
|
||||
NotificationCenter.default.post(name: .IAPHelperPurchaseNotificationFail, object: nil)
|
||||
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseDidFail, object: nil)
|
||||
SKPaymentQueue.default().finishTransaction(transaction)
|
||||
}
|
||||
|
||||
@@ -199,8 +203,19 @@ extension IAPHelper: SKPaymentTransactionObserver {
|
||||
|
||||
purchasedProductIdentifiers.insert(identifier)
|
||||
UserDefaults.standard.set(true, forKey: identifier)
|
||||
NotificationCenter.default.post(name: .IAPHelperPurchaseNotification, object: identifier)
|
||||
NotificationCenter.default.post(name: .EQNInAppPurchaseDidComplete, object: identifier)
|
||||
}
|
||||
|
||||
private func serverPurchaseRegistration(for productId: String, transactionId: String?) {
|
||||
let idTransaction = transactionId ?? "NOT_AVAILABLE"
|
||||
|
||||
let url = EQNGeneratoreURLServer.urlRegisterSubscription(forProductId: productId, transactionId: idTransaction)
|
||||
ServerRequest.default().inviaInformazioniAlServer(with: url, richiesta: .registerSubscription) { (response) in
|
||||
// nope
|
||||
print("[IAPHelper] Subscription registered with server")
|
||||
} failure: { (error) in
|
||||
// nope
|
||||
print("[IAPHelper] Error when registering subscription (error: \(String(describing: error?.localizedDescription))")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-4
@@ -1,9 +1,9 @@
|
||||
//
|
||||
// PastquakesAnnotation.h
|
||||
// EQNMapAnnotationPastquakes.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 04/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
@@ -11,7 +11,10 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface PastquakesAnnotation : NSObject <MKAnnotation>
|
||||
static NSString * const EQNMapAnnotationPastquakesIdentifier = @"EQNMapAnnotationPastquakesIdentifier";
|
||||
|
||||
|
||||
@interface EQNMapAnnotationPastquakes : NSObject <MKAnnotation>
|
||||
|
||||
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
|
||||
@property (nonatomic, copy) NSString *title;
|
||||
+6
-7
@@ -1,15 +1,14 @@
|
||||
//
|
||||
// PastquakesAnnotation.m
|
||||
// EQNMapAnnotationPastquakes.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 04/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "PastquakesAnnotation.h"
|
||||
#import "Costanti.h"
|
||||
#import "EQNMapAnnotationPastquakes.h"
|
||||
|
||||
@implementation PastquakesAnnotation
|
||||
@implementation EQNMapAnnotationPastquakes
|
||||
|
||||
#pragma mark - Init
|
||||
|
||||
@@ -28,7 +27,7 @@
|
||||
|
||||
- (MKAnnotationView *)annotationView
|
||||
{
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:IDENTIFIER_ANNOTATION_PASTQUAKES];
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:EQNMapAnnotationPastquakesIdentifier];
|
||||
annotationView.enabled = YES;
|
||||
annotationView.canShowCallout = YES;
|
||||
NSString *imageString;
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// EQNMapAnnotationSeismic.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MapKit/MapKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
static NSString * const EQNMapAnnotationSeismicIdentifier = @"EQNMapAnnotationSeismicIdentifier";
|
||||
|
||||
|
||||
@interface EQNMapAnnotationSeismic : NSObject <MKAnnotation>
|
||||
|
||||
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
|
||||
@property (nonatomic, copy) NSString *title;
|
||||
@property (nonatomic, readonly) double magnitude;
|
||||
|
||||
- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D)coordinate intensita:(double)magnitude;
|
||||
|
||||
- (MKAnnotationView *)annotationView;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+16
-16
@@ -1,20 +1,21 @@
|
||||
//
|
||||
// SismaAnnotation.m
|
||||
// EQNMapAnnotationSeismic.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 08/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "SismaAnnotation.h"
|
||||
#import "EQNMapAnnotationSeismic.h"
|
||||
|
||||
@implementation SismaAnnotation
|
||||
@implementation EQNMapAnnotationSeismic
|
||||
|
||||
-(id)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate intensita:(double)magnitude{
|
||||
#pragma mark - Init
|
||||
|
||||
- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate intensita:(double)magnitude{
|
||||
|
||||
self = [super init];
|
||||
if (self) {
|
||||
|
||||
_title = title;
|
||||
_coordinate = coordinate;
|
||||
_magnitude = magnitude;
|
||||
@@ -22,24 +23,23 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
-(MKAnnotationView *)annotationView{
|
||||
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:IDENTIFIER_ANNOTATION_SISMI];
|
||||
#pragma mark - Annotation
|
||||
|
||||
- (MKAnnotationView *)annotationView
|
||||
{
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:EQNMapAnnotationSeismicIdentifier];
|
||||
annotationView.enabled = YES;
|
||||
annotationView.canShowCallout = YES;
|
||||
NSString *imageString;
|
||||
|
||||
NSLog(@"magnitudo %f", self.magnitude);
|
||||
|
||||
if(self.magnitude > 4.0){
|
||||
if (self.magnitude > 4.0){
|
||||
imageString = @"dyamond_red";
|
||||
|
||||
}else if (self.magnitude < 3.0){
|
||||
} else if (self.magnitude < 3.0) {
|
||||
imageString = @"dyamond_green";
|
||||
|
||||
}else{
|
||||
} else {
|
||||
imageString = @"dyamond_yellow";
|
||||
|
||||
}
|
||||
|
||||
annotationView.image = [UIImage imageNamed:imageString];
|
||||
@@ -0,0 +1,29 @@
|
||||
//
|
||||
// EQNMapAnnotationSeismicNetwork.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MapKit/MapKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
static NSString * const EQNMapAnnotationSeismicNetworkIdentifier = @"EQNMapAnnotationSeismicNetworkIdentifier";
|
||||
|
||||
|
||||
@interface EQNMapAnnotationSeismicNetwork : NSObject <MKAnnotation>
|
||||
|
||||
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
|
||||
@property (nonatomic, copy) NSString *title;
|
||||
@property (nonatomic, readonly) int magnitude;
|
||||
|
||||
- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate magnitudo:(int)magnitude;
|
||||
|
||||
- (MKAnnotationView *)annotationView;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+16
-12
@@ -1,21 +1,21 @@
|
||||
//
|
||||
// ReteSismicaAnnotation.m
|
||||
// EQNMapAnnotationSeismicNetwork.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 01/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
// Refactored by Andrea Busi
|
||||
// Copyright © 2021 Earthquake Network. All rights reserved.
|
||||
//
|
||||
|
||||
#import "ReteSismicaAnnotation.h"
|
||||
#import "Costanti.h"
|
||||
#import "EQNMapAnnotationSeismicNetwork.h"
|
||||
|
||||
@implementation ReteSismicaAnnotation
|
||||
@implementation EQNMapAnnotationSeismicNetwork
|
||||
|
||||
-(id)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate magnitudo:(int)magnitude{
|
||||
|
||||
#pragma mark - Init
|
||||
|
||||
- (instancetype)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate magnitudo:(int)magnitude
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
|
||||
_title = title;
|
||||
_coordinate = coordinate;
|
||||
_magnitude = magnitude;
|
||||
@@ -23,11 +23,14 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
-(MKAnnotationView *)annotationView{
|
||||
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:IDENTIFIER_ANNOTATION_RETESMARTPHONE];
|
||||
#pragma mark - Public
|
||||
|
||||
- (MKAnnotationView *)annotationView
|
||||
{
|
||||
MKAnnotationView *annotationView = [[MKAnnotationView alloc] initWithAnnotation:self reuseIdentifier:EQNMapAnnotationSeismicNetworkIdentifier];
|
||||
annotationView.enabled = YES;
|
||||
annotationView.canShowCallout = YES;
|
||||
|
||||
NSString *imageString;
|
||||
switch (self.magnitude) {
|
||||
case 1:
|
||||
@@ -48,4 +51,5 @@
|
||||
annotationView.rightCalloutAccessoryView = [UIButton buttonWithType:UIButtonTypeDetailDisclosure];
|
||||
return annotationView;
|
||||
}
|
||||
|
||||
@end
|
||||
+2
-2
@@ -1,5 +1,5 @@
|
||||
//
|
||||
// EQMAccelerometroManager.h
|
||||
// EQNAccelerometroManager.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQMAccelerometroManager : NSObject
|
||||
@interface EQNAccelerometroManager : NSObject
|
||||
|
||||
@property (strong, nonatomic) CLLocationManager *locationManager;
|
||||
@property (strong, nonatomic, nullable) CLLocation *currentLocation;
|
||||
+7
-7
@@ -1,29 +1,29 @@
|
||||
//
|
||||
// EQMAccelerometroManager.m
|
||||
// EQNAccelerometroManager.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQMAccelerometroManager.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
#import <CoreMotion/CoreMotion.h>
|
||||
#import "Costanti.h"
|
||||
#import "EQNMath.h"
|
||||
#import "EQNUser.h"
|
||||
#import "EQNManager.h"
|
||||
|
||||
@interface EQMAccelerometroManager () <CLLocationManagerDelegate>
|
||||
@interface EQNAccelerometroManager () <CLLocationManagerDelegate>
|
||||
@property (nonatomic, assign) BOOL posizioneRilevata;
|
||||
@end
|
||||
|
||||
@implementation EQMAccelerometroManager
|
||||
@implementation EQNAccelerometroManager
|
||||
|
||||
#pragma mark - Singleton
|
||||
|
||||
+ (instancetype)sharedInstance
|
||||
{
|
||||
static EQMAccelerometroManager *instance = nil;
|
||||
static EQNAccelerometroManager *instance = nil;
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
instance = [[self alloc]init];
|
||||
@@ -36,7 +36,7 @@
|
||||
- (instancetype)init
|
||||
{
|
||||
self = [super init];
|
||||
if(self) {
|
||||
if (self) {
|
||||
self.locationManager = [[CLLocationManager alloc] init];
|
||||
if ([self.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]){
|
||||
[self.locationManager requestAlwaysAuthorization];
|
||||
@@ -74,7 +74,7 @@
|
||||
break;
|
||||
}
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:EQNNotificationDidChangeAuthorizationStatus object:nil userInfo:@{}];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:EQNAuthorizationStatusDidChangeNotification object:nil userInfo:@{}];
|
||||
}
|
||||
|
||||
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
|
||||
+6
-4
@@ -9,7 +9,9 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "Costanti.h"
|
||||
|
||||
@interface EQNCalibrazione : NSObject <NSCopying>
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNCalibrazione : NSObject <NSCopying>
|
||||
|
||||
@property (nonatomic, assign) float media;
|
||||
@property (nonatomic, assign) float deviazione;
|
||||
@@ -17,8 +19,8 @@
|
||||
|
||||
@property (nonatomic, assign) EQNStatoCal stato;
|
||||
|
||||
+(void)startCalibrazione:(void(^)(EQNCalibrazione *cal))cal;
|
||||
//-(NSString *)serverMessage;
|
||||
|
||||
+ (void)startCalibrazione:(void(^)(EQNCalibrazione *cal))cal;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+20
-21
@@ -8,14 +8,27 @@
|
||||
|
||||
#import "EQNCalibrazione.h"
|
||||
#import "EQNMath.h"
|
||||
#import "EQMAccelerometroManager.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
|
||||
@implementation EQNCalibrazione
|
||||
|
||||
+(void)startCalibrazione:(void(^)(EQNCalibrazione *cal))cal{
|
||||
#pragma mark - NSCopying
|
||||
|
||||
[EQMAccelerometroManager avviaLetturaAccellerometroIsCalibrazione:YES withCompletion:^(NSArray *dati) {
|
||||
// [[EQMAccelerometroManager sharedInstance] startUpdatingLocation];
|
||||
- (id)copyWithZone:(NSZone *)zone
|
||||
{
|
||||
EQNCalibrazione *model = [[[self class] allocWithZone:zone] init];
|
||||
model.media = self.media;
|
||||
model.deviazione = self.deviazione;
|
||||
model.r3 = self.r3;
|
||||
model.stato = self.stato;
|
||||
return model;
|
||||
}
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
+ (void)startCalibrazione:(void(^)(EQNCalibrazione *cal))cal
|
||||
{
|
||||
[EQNAccelerometroManager avviaLetturaAccellerometroIsCalibrazione:YES withCompletion:^(NSArray *dati) {
|
||||
EQNCalibrazione *calibrazione = [[EQNCalibrazione alloc] init];
|
||||
calibrazione.media = [[EQNMath meanOf:dati] floatValue];
|
||||
calibrazione.deviazione = [[EQNMath standardDeviationOf:dati] floatValue];
|
||||
@@ -23,29 +36,15 @@
|
||||
float max = [rDic[rMax] floatValue] - calibrazione.media;
|
||||
float min = [rDic[rMin] floatValue] - calibrazione.media;
|
||||
calibrazione.r3 = max;
|
||||
if ( max != min){
|
||||
if (max != min){
|
||||
if (min > SOGLIAMIN && max < SOGLIAMAX){
|
||||
calibrazione.stato = calibrato;
|
||||
|
||||
}else
|
||||
} else {
|
||||
calibrazione.stato = nonCalibrato;
|
||||
}
|
||||
}
|
||||
|
||||
cal(calibrazione);
|
||||
|
||||
}];
|
||||
}
|
||||
|
||||
-(id)copyWithZone:(NSZone *)zone {
|
||||
EQNCalibrazione *model = [[[self class] allocWithZone:zone] init];
|
||||
|
||||
model.media = self.media;
|
||||
model.deviazione = self.deviazione;
|
||||
model.r3 = self.r3;
|
||||
model.stato = self.stato;
|
||||
|
||||
return model;
|
||||
}
|
||||
|
||||
|
||||
@end
|
||||
+12
-5
@@ -9,15 +9,22 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <CoreMotion/CoreMotion.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNMath : NSObject
|
||||
|
||||
// calcola la somma dei quadrati delle assi/G ottenute dall'accelerometro
|
||||
/// Calcola la somma dei quadrati delle assi/G ottenute dall'accelerometro
|
||||
+ (float)powSum:(CMAccelerometerData *)accelerometerData;
|
||||
// calcola la media dei valori contenuta nell'array passato
|
||||
|
||||
/// Calcola la media dei valori contenuta nell'array passato
|
||||
+ (NSNumber *)meanOf:(NSArray *)array;
|
||||
// calcola la deviazione standard dei valori contenuti nell'array passato
|
||||
+ (NSNumber *)standardDeviationOf:(NSArray *)array;
|
||||
// restituisce valore massimo e valore minimo contenuto nellarray
|
||||
|
||||
/// Calcola la deviazione standard dei valori contenuti nell'array passato
|
||||
+ (nullable NSNumber *)standardDeviationOf:(NSArray *)array;
|
||||
|
||||
// Restituisce valore massimo e valore minimo contenuto nellarray
|
||||
+ (NSDictionary *)rLimiti:(NSArray *)array;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+12
-6
@@ -7,12 +7,14 @@
|
||||
//
|
||||
|
||||
#import "EQNMath.h"
|
||||
#include <math.h>
|
||||
#import "Costanti.h"
|
||||
#include <math.h>
|
||||
|
||||
|
||||
@implementation EQNMath
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
+ (float)powSum:(CMAccelerometerData *)accelerometerData {
|
||||
|
||||
return sqrt(pow(accelerometerData.acceleration.x, 2.0)+pow(accelerometerData.acceleration.y, 2.0)+pow(accelerometerData.acceleration.z, 2.0));
|
||||
@@ -21,7 +23,7 @@
|
||||
+ (NSNumber *)meanOf:(NSArray *)array
|
||||
{
|
||||
double runningTotal = 0.0;
|
||||
for(NSNumber *number in array)
|
||||
for (NSNumber *number in array)
|
||||
{
|
||||
runningTotal += [number doubleValue];
|
||||
}
|
||||
@@ -31,10 +33,12 @@
|
||||
|
||||
+ (NSNumber *)standardDeviationOf:(NSArray *)array
|
||||
{
|
||||
if(![array count]) return nil;
|
||||
if (![array count]) {
|
||||
return nil;
|
||||
}
|
||||
double mean = [[self meanOf:array] doubleValue];
|
||||
double sumOfSquaredDifferences = 0.0;
|
||||
for(NSNumber *number in array)
|
||||
for (NSNumber *number in array)
|
||||
{
|
||||
double valueOfNumber = [number doubleValue];
|
||||
double difference = valueOfNumber - mean;
|
||||
@@ -43,8 +47,9 @@
|
||||
|
||||
return [NSNumber numberWithDouble:sqrt(sumOfSquaredDifferences / [array count])];
|
||||
}
|
||||
+ (NSDictionary *)rLimiti:(NSArray *)array{
|
||||
|
||||
|
||||
+ (NSDictionary *)rLimiti:(NSArray *)array
|
||||
{
|
||||
float xmax = -MAXFLOAT;
|
||||
float xmin = MAXFLOAT;
|
||||
|
||||
@@ -56,4 +61,5 @@
|
||||
|
||||
return @{rMax : @(xmax), rMin : @(xmin)};
|
||||
}
|
||||
|
||||
@end
|
||||
+12
-1
@@ -10,6 +10,13 @@
|
||||
#import "EQNCalibrazione.h"
|
||||
#import "Costanti.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@class EQNRilevamento;
|
||||
|
||||
typedef void (^calibrationCompletion)(EQNRilevamento * _Nullable rilevamento);
|
||||
|
||||
|
||||
@interface EQNRilevamento : NSObject
|
||||
|
||||
@property (nonatomic, assign) float media;
|
||||
@@ -18,7 +25,11 @@
|
||||
@property (nonatomic, assign) EQNRilevamentoSoglia rilievo;
|
||||
@property (nonatomic, strong) NSDate *timestamp;
|
||||
|
||||
- (instancetype)init NS_UNAVAILABLE;
|
||||
- (instancetype)initWithMedia:(float)media deviazione:(float)deviazione maxAssoluto:(float)maxAssoluto rilievo:(EQNRilevamentoSoglia)rilievo timestamp:(NSDate *)timestamp;
|
||||
|
||||
+(void)startRilevamentoWithCalibrazione:(EQNCalibrazione *)cal result:(void(^)(EQNRilevamento *ril))rilevamento;
|
||||
+ (void)startRilevamentoWithCalibrazione:(EQNCalibrazione *)cal result:(calibrationCompletion)rilevamento;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,57 @@
|
||||
//
|
||||
// EQNRilevamento.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQNRilevamento.h"
|
||||
#import <CoreMotion/CoreMotion.h>
|
||||
#import "EQNMath.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
|
||||
@implementation EQNRilevamento
|
||||
|
||||
#pragma mark - Init
|
||||
|
||||
- (instancetype)initWithMedia:(float)media deviazione:(float)deviazione maxAssoluto:(float)maxAssoluto rilievo:(EQNRilevamentoSoglia)rilievo timestamp:(NSDate *)timestamp
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.media = media;
|
||||
self.deviazione = deviazione;
|
||||
self.maxAssoluto = maxAssoluto;
|
||||
self.rilievo = rilievo;
|
||||
self.timestamp = timestamp;
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
+ (void)startRilevamentoWithCalibrazione:(EQNCalibrazione *)cal result:(calibrationCompletion)rilevamento
|
||||
{
|
||||
if (!cal) {
|
||||
rilevamento(nil);
|
||||
return;
|
||||
}
|
||||
|
||||
[EQNAccelerometroManager avviaLetturaAccellerometroIsCalibrazione:NO withCompletion:^(NSArray *dati) {
|
||||
float media = [[EQNMath meanOf:dati] floatValue];
|
||||
float deviazione = [[EQNMath standardDeviationOf:dati] floatValue];
|
||||
NSDictionary *rDic = [EQNMath rLimiti:dati];
|
||||
float max = [rDic[rMax] floatValue] - cal.media;
|
||||
float maxAssoluto = fabsf(max);
|
||||
EQNRilevamentoSoglia rilievo = (deviazione > SOGLIA_DEVIAZIONE_RILIEVO*cal.deviazione) ? EQNRilevamentoSogliaPositivo : EQNRilevamentoSogliaNegativo;
|
||||
|
||||
EQNRilevamento *aRilievo = [[EQNRilevamento alloc] initWithMedia:media
|
||||
deviazione:deviazione
|
||||
maxAssoluto:maxAssoluto
|
||||
rilievo:rilievo
|
||||
timestamp:[NSDate date]];
|
||||
|
||||
rilevamento(aRilievo);
|
||||
}];
|
||||
}
|
||||
@end
|
||||
@@ -54,6 +54,14 @@ public struct VersioneProProducts {
|
||||
Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
]
|
||||
|
||||
static let identifiersForTop10k: Set<ProductIdentifier> = [
|
||||
Subscription10kMonthly, Subscription10kYearly, Subscription10kYearlyDiscounted
|
||||
]
|
||||
|
||||
static let identifiersForTop100k: Set<ProductIdentifier> = [
|
||||
Subscription100kMonthly, Subscription100kYearly, Subscription100kYearlyDiscounted
|
||||
]
|
||||
|
||||
static let identifierForSubscriptions: Set<ProductIdentifier> = [
|
||||
Subscription10kMonthly, Subscription100kMonthly,
|
||||
Subscription10kYearly, Subscription10kYearlyDiscounted,
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
//
|
||||
// EQNGeneratoreURLServer.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "EQNCalibrazione.h"
|
||||
#import "EQNRilevamento.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNGeneratoreURLServer : NSObject
|
||||
|
||||
+ (NSURL *)urlDownloadDati;
|
||||
+ (NSURL *)urlRegistrazione;
|
||||
+ (NSURL *)urlPosizione;
|
||||
+ (NSURL *)urlMessagioStatoSmartPhone:(EQNCalibrazione *)calibrazione rilevamento:(EQNRilevamento *)rilevamento;
|
||||
+ (NSURL *)urlInvioMessagioTerremoto:(NSInteger )magnitudo withAdress:(NSString *)address;
|
||||
+ (NSURL *)urlInvioCommentoTerremoto:(NSString *)commento codeMessage:(NSString *)code;
|
||||
+ (NSURL *)urlInvioImpostazioniNotifiche;
|
||||
+ (NSURL *)urlDownloadOfferTimeRemaining;
|
||||
+ (NSURL *)urlRegisterSubscriptionForProductId:(NSString *)productId transactionId:(NSString *)transactionId;
|
||||
+ (NSURL *)urlAlertPushTest;
|
||||
+ (NSURL *)urlAlertSimulator;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
+49
-40
@@ -18,38 +18,37 @@
|
||||
|
||||
@implementation EQNGeneratoreURLServer
|
||||
|
||||
+(NSURL *)urlDownloadDati{
|
||||
|
||||
#pragma mark - Public
|
||||
|
||||
+ (NSURL *)urlDownloadDati
|
||||
{
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@",EQNServerUrlDownloadSmartphoneNetwork];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+(NSURL *)urlRegistrazione{
|
||||
|
||||
+ (NSURL *)urlRegistrazione
|
||||
{
|
||||
NSString *primaRegistrazione = @"0";
|
||||
if ([EQNUser defaultUser].registrato){
|
||||
if ([EQNUser defaultUser].registrato) {
|
||||
primaRegistrazione = @"1";
|
||||
NSLog(@"Utente registrato");
|
||||
}
|
||||
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&r_id=%@&lat=%f&lon=%f&ios=1", EQNServerUrlRegistration, primaRegistrazione, [EQNUser defaultUser].tokenUser, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude ];
|
||||
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&r_id=%@&lat=%f&lon=%f&ios=1", EQNServerUrlRegistration, primaRegistrazione, [EQNUser defaultUser].tokenUser, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+(NSURL *)urlPosizione{
|
||||
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&lat=%f&lon=%f", EQNServerUrlUserLocation, [EQNUser defaultUser].user_ID, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude ];
|
||||
|
||||
+ (NSURL *)urlPosizione
|
||||
{
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&lat=%f&lon=%f", EQNServerUrlUserLocation, [EQNUser defaultUser].user_ID, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+(NSURL *)urlMessagioStatoSmartPhone:(EQNCalibrazione *)calibrazione rilevamento:(EQNRilevamento *)rilevamento{
|
||||
|
||||
+ (NSURL *)urlMessagioStatoSmartPhone:(EQNCalibrazione *)calibrazione rilevamento:(EQNRilevamento *)rilevamento
|
||||
{
|
||||
NSString *e_t = @"0";
|
||||
NSString *a_max = @"0";
|
||||
|
||||
if (rilevamento.rilievo == positivo){
|
||||
if (rilevamento.rilievo == EQNRilevamentoSogliaPositivo){
|
||||
e_t = @"1";
|
||||
a_max =[NSString stringWithFormat:@"%f",rilevamento.maxAssoluto];
|
||||
}
|
||||
@@ -60,41 +59,42 @@
|
||||
NSString *acc = @"10";
|
||||
NSString *d_not = @"0";
|
||||
NSString *calib = @"0";
|
||||
if (calibrazione.stato == calibrato)
|
||||
if (calibrazione.stato == calibrato) {
|
||||
calib = @"1";
|
||||
}
|
||||
|
||||
NSString *ch = @"0";
|
||||
if ([EQNUser defaultUser].inCarica)
|
||||
if ([EQNUser defaultUser].inCarica) {
|
||||
ch = @"1";
|
||||
}
|
||||
|
||||
NSString *s_on = @"0";
|
||||
if ([EQNUser defaultUser].monitorOn)
|
||||
if ([EQNUser defaultUser].monitorOn) {
|
||||
s_on = @"1";
|
||||
}
|
||||
|
||||
NSString *tru = @"0";
|
||||
|
||||
NSString *upd = @"0";
|
||||
if ([EQNUser defaultUser].distanza > DISTANZA_METRI_SEGNALAZIONE)
|
||||
if ([EQNUser defaultUser].distanza > DISTANZA_METRI_SEGNALAZIONE) {
|
||||
upd = @"1";
|
||||
}
|
||||
|
||||
NSString *ver = [self ottieniVersioneComeIntero];
|
||||
NSString *os = @"1";
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?e_t=%@&u_id=%@&lat=%@&lon=%@&acc=%@&a_max=%@&d_not=%@&cal=%@&ch=%@&s_on=%@&tru=%@&upd=%@&ver=%@&os=%@", EQNServerUrlCalibration,e_t,u_id,lat,lon,acc,a_max,d_not,calib,ch,s_on,tru,upd,ver,os];
|
||||
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+(NSString *)ottieniVersioneComeIntero{
|
||||
|
||||
+ (NSString *)ottieniVersioneComeIntero
|
||||
{
|
||||
NSNumber * versone = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
|
||||
int versioneItero = [versone intValue];
|
||||
|
||||
return [NSString stringWithFormat:@"%i", versioneItero];
|
||||
|
||||
}
|
||||
|
||||
+(NSURL *)urlInvioMessagioTerremoto:(NSInteger )magnitudo withAdress:(NSString *)address{
|
||||
|
||||
+ (NSURL *)urlInvioMessagioTerremoto:(NSInteger )magnitudo withAdress:(NSString *)address
|
||||
{
|
||||
NSString *lat = [NSString stringWithFormat:@"%f", [EQNUser defaultUser].lastPosition.coordinate.latitude];
|
||||
NSString *lon = [NSString stringWithFormat:@"%f", [EQNUser defaultUser].lastPosition.coordinate.longitude];
|
||||
NSDate *date = [NSDate date];
|
||||
@@ -107,25 +107,18 @@
|
||||
if (url) {
|
||||
return url;
|
||||
}
|
||||
else{
|
||||
|
||||
stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&lat=%@&lon=%@&mag=%ld&hod=%@", EQNServerUrlSendUserReport, [EQNUser defaultUser].user_ID, lat, lon, (long)magnitudo, ora];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&lat=%@&lon=%@&mag=%ld&hod=%@", EQNServerUrlSendUserReport, [EQNUser defaultUser].user_ID, lat, lon, (long)magnitudo, ora];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+(NSURL *)urlInvioCommentoTerremoto:(NSString *)commento codeMessage:(NSString *)code{
|
||||
+ (NSURL *)urlInvioCommentoTerremoto:(NSString *)commento codeMessage:(NSString *)code
|
||||
{
|
||||
NSString *codeEscaped = [code stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet ]];
|
||||
|
||||
|
||||
NSString* codeEscaped = [code stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet ]];
|
||||
|
||||
NSString* commentEscaped = [commento stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet ]];
|
||||
NSString *commentEscaped = [commento stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet ]];
|
||||
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&e_code=%@&message=%@", EQNServerUrlSendUserReportMessage, [EQNUser defaultUser].user_ID, codeEscaped, commentEscaped];
|
||||
|
||||
return [NSURL URLWithString: stringUrl];
|
||||
|
||||
}
|
||||
|
||||
+ (NSURL *)urlInvioImpostazioniNotifiche
|
||||
@@ -242,7 +235,6 @@
|
||||
|
||||
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
|
||||
}
|
||||
|
||||
+ (NSURL *)urlDownloadOfferTimeRemaining
|
||||
@@ -251,6 +243,13 @@
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+ (NSURL *)urlRegisterSubscriptionForProductId:(NSString *)productId transactionId:(NSString *)transactionId
|
||||
{
|
||||
NSString *walletSub = @""; // codice associato all'acquisto che conosce anche l'utente (se esiste)
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?u_id=%@&token_sub=%@&wallet_sub=%@&sku=%@&ios=1", EQNServerUrlRegisterSubscription, [EQNUser defaultUser].user_ID, transactionId, walletSub, productId];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+ (NSURL *)urlAlertPushTest
|
||||
{
|
||||
EQNGenericValue *radius = [EQNData raggioSismaFor:[EQNAllertaSismica sharedInstance].raggioSismiLievi];
|
||||
@@ -259,6 +258,16 @@
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
+ (NSURL *)urlAlertSimulator
|
||||
{
|
||||
CLLocationCoordinate2D userLastPosition = [EQNUser defaultUser].lastPosition.coordinate;
|
||||
CLLocationDistance distance = 100;
|
||||
NSInteger top10k = EQNPurchaseUtility.isTop10kEnabled ? 1 : 0;
|
||||
NSInteger top100k = EQNPurchaseUtility.isTop100kEnabled ? 1 : 0;
|
||||
NSString *stringUrl = [NSString stringWithFormat:@"%@?lat=%f&lon=%f&dis=%f&top10k=%lu&top100k=%lu", EQNServerUrlAlertSimulator, userLastPosition.latitude, userLastPosition.longitude, distance, (long)top10k, (long)top100k];
|
||||
return [NSURL URLWithString:stringUrl];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
|
||||
+3
-2
@@ -7,7 +7,6 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Costanti.h"
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
@@ -20,10 +19,12 @@ typedef void (^errorCompletionHandler)(NSError * _Nullable error);
|
||||
@property (nonatomic) BOOL isConnect;
|
||||
|
||||
|
||||
+ (instancetype)defaultServerConnectionSingleton;
|
||||
+ (instancetype)defaultServerConnectionSingleton NS_SWIFT_NAME(default());
|
||||
|
||||
- (void)inviaInformazioniAlServerWithURL:(NSURL *)url richiesta:(EQNTipoChiamata)chiamata success:(successCompletionHandler)onSuccess failure:(errorCompletionHandler)onFailure;
|
||||
|
||||
/// NOTA: questo metodo è implementato ma non contiene un URL valido per l'invio della ricevuta
|
||||
/// Al momento non viene utilizzato dall'app perchè è inutile
|
||||
- (void)inviaRicevuta:(NSData *)ricevuta success:(successCompletionHandler)onSuccess failure:(errorCompletionHandler)onFailure;
|
||||
|
||||
@end
|
||||
+11
-8
@@ -109,9 +109,12 @@
|
||||
switch (httpResp.statusCode) {
|
||||
case 200:
|
||||
switch (chiamata) {
|
||||
case posizione:
|
||||
case EQNTipoChiamataPosizione:
|
||||
onSuccess(@"success");
|
||||
break;
|
||||
case EQNTipoChiamataAlertSimulator:
|
||||
onSuccess([NSString stringWithFormat:@"%@", JSON]);
|
||||
break;
|
||||
default:
|
||||
onSuccess(JSON);
|
||||
break;
|
||||
@@ -122,22 +125,22 @@
|
||||
}
|
||||
} else {
|
||||
NSString *newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
|
||||
if (newStr) {
|
||||
if (newStr && (httpResp.statusCode >= 200 && httpResp.statusCode <= 299)) {
|
||||
if (EQNDebugPrintResponse) {
|
||||
NSLog(@"[ServerRequest] response string: %@", newStr);
|
||||
}
|
||||
|
||||
switch (chiamata) {
|
||||
case segnalazzioneTerremoto:
|
||||
case EQNTipoChiamataSegnalazioneTerremoto:
|
||||
onSuccess([EQNUtility clearStringMessaggi:newStr]);
|
||||
break;
|
||||
case rilevamento:
|
||||
case EQNTipoChiamataRilevamento:
|
||||
onSuccess([EQNUtility clearStringMessaggi:newStr]);
|
||||
break;
|
||||
case calibrazione:
|
||||
onSuccess(newStr);
|
||||
break;
|
||||
case impostazioniNotifiche:
|
||||
case EQNTipoChiamataCalibrazione:
|
||||
case EQNTipoChiamataImpostazioniNotifiche:
|
||||
case EQNTipoChiamataAlertSimulator:
|
||||
case EQNTipoChiamataRegisterSubscription:
|
||||
onSuccess(newStr);
|
||||
default:
|
||||
// don't call the callback
|
||||
@@ -1,9 +1,9 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17156" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="CWo-PE-Dqp">
|
||||
<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="17701" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES" initialViewController="CWo-PE-Dqp">
|
||||
<device id="retina6_1" orientation="portrait" appearance="light"/>
|
||||
<dependencies>
|
||||
<deployment identifier="iOS"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17125"/>
|
||||
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="17703"/>
|
||||
<capability name="Named colors" minToolsVersion="9.0"/>
|
||||
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
|
||||
<capability name="System colors in document resources" minToolsVersion="11.0"/>
|
||||
@@ -313,29 +313,19 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="none" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" translatesAutoresizingMaskIntoConstraints="NO" id="q4o-YO-KLX">
|
||||
<rect key="frame" x="0.0" y="140" width="414" height="618"/>
|
||||
<rect key="frame" x="0.0" y="140" width="414" height="673"/>
|
||||
<connections>
|
||||
<outlet property="dataSource" destination="tVM-DH-fmv" id="XVf-fb-5Kl"/>
|
||||
<outlet property="delegate" destination="tVM-DH-fmv" id="dWO-2A-Ukg"/>
|
||||
</connections>
|
||||
</tableView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="Nac-25-EPW">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="55"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="55" id="GGM-Kn-QVU"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="VUD-fs-xgm"/>
|
||||
<color key="backgroundColor" systemColor="groupTableViewBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstItem="VUD-fs-xgm" firstAttribute="bottom" secondItem="q4o-YO-KLX" secondAttribute="bottom" id="3P1-fP-chi"/>
|
||||
<constraint firstItem="q4o-YO-KLX" firstAttribute="top" secondItem="VUD-fs-xgm" secondAttribute="top" id="IeK-TW-jL5"/>
|
||||
<constraint firstItem="Nac-25-EPW" firstAttribute="top" secondItem="q4o-YO-KLX" secondAttribute="bottom" id="TKT-yo-pRg"/>
|
||||
<constraint firstItem="Nac-25-EPW" firstAttribute="bottom" secondItem="VUD-fs-xgm" secondAttribute="bottom" id="YXT-r6-DPc"/>
|
||||
<constraint firstItem="q4o-YO-KLX" firstAttribute="leading" secondItem="VUD-fs-xgm" secondAttribute="leading" id="Yyx-Tc-hnn"/>
|
||||
<constraint firstItem="Nac-25-EPW" firstAttribute="trailing" secondItem="VUD-fs-xgm" secondAttribute="trailing" id="a5L-LI-EDT"/>
|
||||
<constraint firstItem="Nac-25-EPW" firstAttribute="leading" secondItem="VUD-fs-xgm" secondAttribute="leading" id="gFt-0T-8rP"/>
|
||||
<constraint firstItem="VUD-fs-xgm" firstAttribute="trailing" secondItem="q4o-YO-KLX" secondAttribute="trailing" id="yd6-Pa-c2s"/>
|
||||
</constraints>
|
||||
</view>
|
||||
@@ -364,15 +354,13 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</rightBarButtonItems>
|
||||
</navigationItem>
|
||||
<connections>
|
||||
<outlet property="bannerContainerHeightConstraint" destination="GGM-Kn-QVU" id="vm3-SN-HrQ"/>
|
||||
<outlet property="bannerContainerView" destination="Nac-25-EPW" id="aJ3-kF-jA3"/>
|
||||
<outlet property="expandeCollapseButton" destination="HTN-07-s5p" id="lxP-Im-NME"/>
|
||||
<outlet property="tableView" destination="q4o-YO-KLX" id="tee-h5-dZi"/>
|
||||
<segue destination="LHm-XT-f2y" kind="presentation" identifier="ShowMapDetail" id="say-mL-Iyg"/>
|
||||
<segue destination="rZ4-xN-lLk" kind="presentation" identifier="ShowSettings" modalPresentationStyle="overCurrentContext" modalTransitionStyle="crossDissolve" id="5R7-S8-R7P"/>
|
||||
<segue destination="lTI-GM-Lum" kind="presentation" identifier="ShowSeismicNetworks" id="JKE-mg-BIk"/>
|
||||
<segue destination="6LP-zk-O1z" kind="presentation" identifier="ShowFilters" modalPresentationStyle="overCurrentContext" modalTransitionStyle="crossDissolve" id="Nzu-iH-UgB"/>
|
||||
<segue destination="Rfp-kt-2Kx" kind="presentation" identifier="ShowCardSettings" modalPresentationStyle="overCurrentContext" modalTransitionStyle="crossDissolve" id="VWw-16-xGw"/>
|
||||
<segue destination="6Ia-ax-PLl" kind="presentation" identifier="ShowMapDetail" id="UNr-Av-Xcw"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="34i-9D-p3O" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
@@ -1007,7 +995,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<!--Subscriptions View Controller-->
|
||||
<scene sceneID="9hc-If-3Tb">
|
||||
<objects>
|
||||
<tableViewController modalPresentationStyle="fullScreen" id="cXN-cY-DjM" customClass="SubscriptionsViewController" customModule="Earthquake_Network" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableViewController storyboardIdentifier="subscriptionsController" modalPresentationStyle="fullScreen" id="cXN-cY-DjM" customClass="SubscriptionsViewController" customModule="Earthquake_Network" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<tableView key="view" clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" dataMode="prototypes" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="28" sectionFooterHeight="28" id="q2Q-SQ-bFH">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
@@ -1228,7 +1216,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<toolbarItems/>
|
||||
<navigationItem key="navigationItem" id="oAm-fG-yGd"/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="Lnw-v0-Fdj">
|
||||
<rect key="frame" x="0.0" y="44" width="414" height="44"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
@@ -1245,14 +1233,14 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<objects>
|
||||
<viewController id="fdS-yL-Xoy" customClass="PastquakesDettagliMappa" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="rHU-U8-Tsf">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="896"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="842"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="ExJ-I4-Mfq">
|
||||
<rect key="frame" x="0.0" y="88" width="414" height="670"/>
|
||||
<rect key="frame" x="0.0" y="56" width="414" height="647"/>
|
||||
</mapView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="lSE-rp-Mve">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="55"/>
|
||||
<rect key="frame" x="0.0" y="703" width="414" height="55"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GCe-cb-Wlp">
|
||||
<rect key="frame" x="15" y="0.0" width="344" height="55"/>
|
||||
@@ -1263,49 +1251,59 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_drop_down_48px-128" translatesAutoresizingMaskIntoConstraints="NO" id="8sR-8Z-tr5">
|
||||
<rect key="frame" x="359" y="0.0" width="55" height="55"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="55" id="Wv0-Fq-H0d"/>
|
||||
<constraint firstAttribute="width" constant="55" id="dDZ-PW-YZZ"/>
|
||||
<constraint firstAttribute="width" constant="55" id="vPg-iW-NEN"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="GCe-cb-Wlp" firstAttribute="top" secondItem="lSE-rp-Mve" secondAttribute="top" id="6c0-XC-3aA"/>
|
||||
<constraint firstAttribute="bottom" secondItem="GCe-cb-Wlp" secondAttribute="bottom" id="HGX-Hi-6IM"/>
|
||||
<constraint firstAttribute="trailing" secondItem="8sR-8Z-tr5" secondAttribute="trailing" id="RvX-fW-xAe"/>
|
||||
<constraint firstAttribute="height" constant="55" id="Tlh-ri-Vgd"/>
|
||||
<constraint firstItem="8sR-8Z-tr5" firstAttribute="top" secondItem="lSE-rp-Mve" secondAttribute="top" id="krQ-yR-gxi"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8sR-8Z-tr5" secondAttribute="bottom" id="ks6-xX-xcg"/>
|
||||
<constraint firstItem="8sR-8Z-tr5" firstAttribute="leading" secondItem="GCe-cb-Wlp" secondAttribute="trailing" id="qPA-Nd-emF"/>
|
||||
<constraint firstItem="GCe-cb-Wlp" firstAttribute="leading" secondItem="lSE-rp-Mve" secondAttribute="leading" constant="15" id="uRw-tP-FQm"/>
|
||||
<constraint firstAttribute="bottom" secondItem="GCe-cb-Wlp" secondAttribute="bottom" id="1Es-Ic-xO6"/>
|
||||
<constraint firstAttribute="trailing" secondItem="8sR-8Z-tr5" secondAttribute="trailing" id="7eT-TU-wHu"/>
|
||||
<constraint firstItem="GCe-cb-Wlp" firstAttribute="top" secondItem="lSE-rp-Mve" secondAttribute="top" id="8xw-ns-HjS"/>
|
||||
<constraint firstAttribute="height" constant="55" id="Flj-Sf-TI2"/>
|
||||
<constraint firstAttribute="bottom" secondItem="8sR-8Z-tr5" secondAttribute="bottom" id="Nds-Py-0SE"/>
|
||||
<constraint firstItem="8sR-8Z-tr5" firstAttribute="leading" secondItem="GCe-cb-Wlp" secondAttribute="trailing" id="ddM-AV-wik"/>
|
||||
<constraint firstItem="GCe-cb-Wlp" firstAttribute="leading" secondItem="lSE-rp-Mve" secondAttribute="leading" constant="15" id="fJx-Rh-0JH"/>
|
||||
<constraint firstItem="8sR-8Z-tr5" firstAttribute="top" secondItem="lSE-rp-Mve" secondAttribute="top" id="vLj-f9-flk"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="eqZ-br-SO8">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="55"/>
|
||||
<rect key="frame" x="0.0" y="703" width="414" height="55"/>
|
||||
<connections>
|
||||
<action selector="visualizzaPikerFiltro:" destination="fdS-yL-Xoy" eventType="touchUpInside" id="OCO-nd-ca2"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="tRo-KE-tea">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="50"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="Bcg-7j-fRh"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="F4b-eJ-oaF"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="bottom" secondItem="F4b-eJ-oaF" secondAttribute="bottom" id="3uM-y4-ucm"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="bottom" secondItem="F4b-eJ-oaF" secondAttribute="bottom" id="PFu-3h-T0C"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="PeC-ya-jB9"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="Seq-if-3LN"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="top" secondItem="ExJ-I4-Mfq" secondAttribute="bottom" id="Sz6-3c-zdx"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="TZ4-ht-eeM"/>
|
||||
<constraint firstItem="F4b-eJ-oaF" firstAttribute="bottom" secondItem="ExJ-I4-Mfq" secondAttribute="bottom" constant="55" id="Ybj-Hf-gP1"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="top" secondItem="F4b-eJ-oaF" secondAttribute="top" id="gVx-Xt-pEl"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="top" secondItem="ExJ-I4-Mfq" secondAttribute="bottom" id="gq4-P9-TJp"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="iU0-nH-fMB"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="ifh-cM-CCe"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="nNF-Ef-z8Z"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="top" secondItem="F4b-eJ-oaF" secondAttribute="top" id="7Cd-tF-c9l"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="DLZ-Tv-d6i"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="height" secondItem="lSE-rp-Mve" secondAttribute="height" id="Hwc-Cd-Xly"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="width" secondItem="lSE-rp-Mve" secondAttribute="width" id="PmS-Gh-hNB"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="ZgG-Ya-dxQ"/>
|
||||
<constraint firstItem="tRo-KE-tea" firstAttribute="top" secondItem="lSE-rp-Mve" secondAttribute="bottom" id="eIS-dn-Cze"/>
|
||||
<constraint firstItem="tRo-KE-tea" firstAttribute="bottom" secondItem="F4b-eJ-oaF" secondAttribute="bottom" id="efc-bq-Uq3"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="centerY" secondItem="lSE-rp-Mve" secondAttribute="centerY" id="gp1-zh-3Hn"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="jFg-f9-Kju"/>
|
||||
<constraint firstItem="eqZ-br-SO8" firstAttribute="centerX" secondItem="lSE-rp-Mve" secondAttribute="centerX" id="kZM-ig-qxe"/>
|
||||
<constraint firstItem="tRo-KE-tea" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="oMi-WC-0ee"/>
|
||||
<constraint firstItem="tRo-KE-tea" firstAttribute="leading" secondItem="F4b-eJ-oaF" secondAttribute="leading" id="pLa-Hb-kK6"/>
|
||||
<constraint firstItem="ExJ-I4-Mfq" firstAttribute="trailing" secondItem="F4b-eJ-oaF" secondAttribute="trailing" id="pO5-eS-Yst"/>
|
||||
<constraint firstItem="lSE-rp-Mve" firstAttribute="top" secondItem="ExJ-I4-Mfq" secondAttribute="bottom" id="pyZ-S1-2EU"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="1lc-GD-9UQ"/>
|
||||
<connections>
|
||||
<outlet property="bannerContainerHeightConstraint" destination="Bcg-7j-fRh" id="6eX-0S-NXy"/>
|
||||
<outlet property="bannerContainerView" destination="tRo-KE-tea" id="K8n-uF-e4r"/>
|
||||
<outlet property="buttonAzione" destination="eqZ-br-SO8" id="dh1-pF-aTB"/>
|
||||
<outlet property="containerView" destination="lSE-rp-Mve" id="ckk-gd-YSf"/>
|
||||
<outlet property="imageAzione" destination="8sR-8Z-tr5" id="SGO-zu-R0w"/>
|
||||
@@ -1315,7 +1313,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Q8y-Fc-DjQ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-4413.75" y="-7439.788732394366"/>
|
||||
<point key="canvasLocation" x="-4414.4927536231889" y="-7440.4017857142853"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="pK6-is-2fg">
|
||||
@@ -1344,10 +1342,23 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="iko-a1-LWv">
|
||||
<rect key="frame" x="0.0" y="56" width="414" height="697"/>
|
||||
<rect key="frame" x="0.0" y="56" width="414" height="647"/>
|
||||
</mapView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CTZ-OY-cgW">
|
||||
<rect key="frame" x="0.0" y="703" width="414" height="55"/>
|
||||
<connections>
|
||||
<action selector="visualizzaPikerFiltro:" destination="pNh-Ni-Yv5" eventType="touchUpInside" id="eoW-3k-k9E"/>
|
||||
</connections>
|
||||
</button>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="kCt-Dd-MaY">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="50"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="ljc-h5-JHC"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="8TU-C5-fRW">
|
||||
<rect key="frame" x="0.0" y="753" width="414" height="55"/>
|
||||
<rect key="frame" x="0.0" y="703" width="414" height="55"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Sx2-Xi-NrV">
|
||||
<rect key="frame" x="15" y="0.0" width="344" height="55"/>
|
||||
@@ -1358,49 +1369,46 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="ic_arrow_drop_down_48px-128" translatesAutoresizingMaskIntoConstraints="NO" id="pv8-Xy-9z0">
|
||||
<rect key="frame" x="359" y="0.0" width="55" height="55"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="55" id="Kme-YI-quM"/>
|
||||
<constraint firstAttribute="width" constant="55" id="P1j-Ao-TXX"/>
|
||||
<constraint firstAttribute="width" constant="55" id="gT5-qw-bCr"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="pv8-Xy-9z0" firstAttribute="leading" secondItem="Sx2-Xi-NrV" secondAttribute="trailing" id="0AN-IL-loQ"/>
|
||||
<constraint firstAttribute="bottom" secondItem="pv8-Xy-9z0" secondAttribute="bottom" id="7J3-0E-PIb"/>
|
||||
<constraint firstItem="Sx2-Xi-NrV" firstAttribute="top" secondItem="8TU-C5-fRW" secondAttribute="top" id="8ES-et-vzx"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Sx2-Xi-NrV" secondAttribute="bottom" id="EO2-Kp-MPQ"/>
|
||||
<constraint firstItem="Sx2-Xi-NrV" firstAttribute="leading" secondItem="8TU-C5-fRW" secondAttribute="leading" constant="15" id="anH-2w-cLJ"/>
|
||||
<constraint firstAttribute="trailing" secondItem="pv8-Xy-9z0" secondAttribute="trailing" id="eN7-l2-b5V"/>
|
||||
<constraint firstAttribute="height" constant="55" id="j1c-n2-b4Y"/>
|
||||
<constraint firstItem="pv8-Xy-9z0" firstAttribute="top" secondItem="8TU-C5-fRW" secondAttribute="top" id="s6s-F4-AW3"/>
|
||||
<constraint firstAttribute="height" constant="55" id="3s0-7U-bQj"/>
|
||||
<constraint firstItem="pv8-Xy-9z0" firstAttribute="leading" secondItem="Sx2-Xi-NrV" secondAttribute="trailing" id="Ba8-Rj-cIS"/>
|
||||
<constraint firstAttribute="bottom" secondItem="Sx2-Xi-NrV" secondAttribute="bottom" id="H0f-c4-IVt"/>
|
||||
<constraint firstItem="Sx2-Xi-NrV" firstAttribute="leading" secondItem="8TU-C5-fRW" secondAttribute="leading" constant="15" id="HOa-2v-KDD"/>
|
||||
<constraint firstAttribute="bottom" secondItem="pv8-Xy-9z0" secondAttribute="bottom" id="Zse-cX-dcV"/>
|
||||
<constraint firstAttribute="trailing" secondItem="pv8-Xy-9z0" secondAttribute="trailing" id="kjJ-Jx-Ioi"/>
|
||||
<constraint firstItem="Sx2-Xi-NrV" firstAttribute="top" secondItem="8TU-C5-fRW" secondAttribute="top" id="tKe-p2-O3p"/>
|
||||
<constraint firstItem="pv8-Xy-9z0" firstAttribute="top" secondItem="8TU-C5-fRW" secondAttribute="top" id="wYT-x6-A1N"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="CTZ-OY-cgW">
|
||||
<rect key="frame" x="0.0" y="753" width="414" height="55"/>
|
||||
<connections>
|
||||
<action selector="visualizzaPikerFiltro:" destination="pNh-Ni-Yv5" eventType="touchUpInside" id="eoW-3k-k9E"/>
|
||||
</connections>
|
||||
</button>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="fDH-pM-Eay"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="4kg-Dv-bIf"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="bottom" secondItem="fDH-pM-Eay" secondAttribute="bottom" id="6va-wN-8eE"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="top" secondItem="iko-a1-LWv" secondAttribute="bottom" id="Fjo-LQ-gHL"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="N2u-wn-Bxt"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="SGY-iP-sD6"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="top" secondItem="fDH-pM-Eay" secondAttribute="top" id="SL9-Jt-R7x"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="SP7-gs-RfF"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="Y29-aa-3yq"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="kym-06-eOn"/>
|
||||
<constraint firstItem="fDH-pM-Eay" firstAttribute="bottom" secondItem="iko-a1-LWv" secondAttribute="bottom" constant="55" id="m89-E5-28R"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="bottom" secondItem="fDH-pM-Eay" secondAttribute="bottom" id="tbB-Et-6Pb"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="top" secondItem="iko-a1-LWv" secondAttribute="bottom" id="wkd-56-YTg"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="1L6-2l-kr2"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="top" secondItem="fDH-pM-Eay" secondAttribute="top" id="FCZ-a9-IpJ"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="width" secondItem="8TU-C5-fRW" secondAttribute="width" id="Haq-uM-Pk9"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="NXE-Lw-aXn"/>
|
||||
<constraint firstItem="kCt-Dd-MaY" firstAttribute="top" secondItem="8TU-C5-fRW" secondAttribute="bottom" id="d1j-xi-Kvc"/>
|
||||
<constraint firstItem="kCt-Dd-MaY" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="fle-IU-Uqv"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="centerX" secondItem="8TU-C5-fRW" secondAttribute="centerX" id="fuC-ta-9tn"/>
|
||||
<constraint firstItem="8TU-C5-fRW" firstAttribute="top" secondItem="iko-a1-LWv" secondAttribute="bottom" id="iDZ-TX-1dv"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="n2e-k3-tjm"/>
|
||||
<constraint firstItem="kCt-Dd-MaY" firstAttribute="leading" secondItem="fDH-pM-Eay" secondAttribute="leading" id="ors-Mh-Crn"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="centerY" secondItem="8TU-C5-fRW" secondAttribute="centerY" id="qNd-8j-uYC"/>
|
||||
<constraint firstItem="iko-a1-LWv" firstAttribute="trailing" secondItem="fDH-pM-Eay" secondAttribute="trailing" id="rTW-4m-9My"/>
|
||||
<constraint firstItem="CTZ-OY-cgW" firstAttribute="height" secondItem="8TU-C5-fRW" secondAttribute="height" id="vkj-Xb-NpT"/>
|
||||
<constraint firstItem="kCt-Dd-MaY" firstAttribute="bottom" secondItem="fDH-pM-Eay" secondAttribute="bottom" id="wSn-ss-ZAz"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="aQo-9D-Bwb"/>
|
||||
<connections>
|
||||
<outlet property="bannerContainerHeightConstraint" destination="ljc-h5-JHC" id="5OR-fA-Hrx"/>
|
||||
<outlet property="bannerContainerView" destination="kCt-Dd-MaY" id="BVk-Cz-RfM"/>
|
||||
<outlet property="buttonAzione" destination="CTZ-OY-cgW" id="dG4-M5-PPF"/>
|
||||
<outlet property="containerView" destination="8TU-C5-fRW" id="d4g-SV-NI6"/>
|
||||
<outlet property="imageAzione" destination="pv8-Xy-9z0" id="pLN-TH-GdZ"/>
|
||||
@@ -1410,7 +1418,7 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="rgA-5b-IRk" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-6178" y="-6364"/>
|
||||
<point key="canvasLocation" x="-6178.2608695652179" y="-6364.2857142857138"/>
|
||||
</scene>
|
||||
<!--Log View Controller-->
|
||||
<scene sceneID="bCB-QP-zCq">
|
||||
@@ -1457,53 +1465,50 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-10929" y="-7374"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="DjR-k2-Uke">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="LHm-XT-f2y" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" insetsLayoutMarginsFromSafeArea="NO" id="zMO-g0-QNp">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="g91-vR-Oi1" kind="relationship" relationship="rootViewController" id="YJC-in-eGh"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="ynl-Z3-Typ" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-7586" y="-5464"/>
|
||||
</scene>
|
||||
<!--Rete Sismi Dettagli Mappa-->
|
||||
<!--Seismic Networks Map Detail View Controller-->
|
||||
<scene sceneID="Sdn-cf-5DS">
|
||||
<objects>
|
||||
<viewController id="g91-vR-Oi1" customClass="ReteSismiDettagliMappa" sceneMemberID="viewController">
|
||||
<viewController id="g91-vR-Oi1" customClass="SeismicNetworksMapDetailViewController" customModule="Earthquake_Network" customModuleProvider="target" sceneMemberID="viewController">
|
||||
<view key="view" contentMode="scaleToFill" id="IDp-uY-aLk">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="842"/>
|
||||
<autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
|
||||
<subviews>
|
||||
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="U9W-fH-WlC">
|
||||
<rect key="frame" x="0.0" y="56" width="414" height="752"/>
|
||||
<rect key="frame" x="0.0" y="56" width="414" height="702"/>
|
||||
<connections>
|
||||
<outlet property="delegate" destination="g91-vR-Oi1" id="D0c-pw-wKq"/>
|
||||
</connections>
|
||||
</mapView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="ncH-7F-a3K">
|
||||
<rect key="frame" x="0.0" y="758" width="414" height="50"/>
|
||||
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="50" id="Bwj-hF-heI"/>
|
||||
</constraints>
|
||||
</view>
|
||||
</subviews>
|
||||
<viewLayoutGuide key="safeArea" id="Zod-NC-YLT"/>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="Zod-NC-YLT" firstAttribute="bottom" secondItem="U9W-fH-WlC" secondAttribute="bottom" id="EOv-ch-LrG"/>
|
||||
<constraint firstItem="ncH-7F-a3K" firstAttribute="bottom" secondItem="Zod-NC-YLT" secondAttribute="bottom" id="3FB-XQ-wdb"/>
|
||||
<constraint firstItem="ncH-7F-a3K" firstAttribute="top" secondItem="U9W-fH-WlC" secondAttribute="bottom" id="UR6-zp-txx"/>
|
||||
<constraint firstItem="U9W-fH-WlC" firstAttribute="trailing" secondItem="Zod-NC-YLT" secondAttribute="trailing" id="auD-wh-YAA"/>
|
||||
<constraint firstItem="ncH-7F-a3K" firstAttribute="leading" secondItem="Zod-NC-YLT" secondAttribute="leading" id="mZi-y4-Eu2"/>
|
||||
<constraint firstItem="Zod-NC-YLT" firstAttribute="trailing" secondItem="ncH-7F-a3K" secondAttribute="trailing" id="pj6-Iv-JRe"/>
|
||||
<constraint firstItem="U9W-fH-WlC" firstAttribute="leading" secondItem="Zod-NC-YLT" secondAttribute="leading" id="ruS-YM-kiK"/>
|
||||
<constraint firstItem="U9W-fH-WlC" firstAttribute="top" secondItem="Zod-NC-YLT" secondAttribute="top" id="wkd-21-Q06"/>
|
||||
</constraints>
|
||||
</view>
|
||||
<navigationItem key="navigationItem" id="h9X-ff-rCA"/>
|
||||
<connections>
|
||||
<outlet property="bannerContainerHeightConstraint" destination="Bwj-hF-heI" id="7hG-Ai-1vh"/>
|
||||
<outlet property="bannerContainerView" destination="ncH-7F-a3K" id="ee8-UF-HHJ"/>
|
||||
<outlet property="mapView" destination="U9W-fH-WlC" id="QAC-GP-eaH"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="tNk-gG-6jK" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-6854" y="-5464"/>
|
||||
<point key="canvasLocation" x="-6815.9420289855079" y="-5464.2857142857138"/>
|
||||
</scene>
|
||||
<!--Settings-->
|
||||
<scene sceneID="nIl-RI-AZv">
|
||||
@@ -1852,15 +1857,15 @@ In più sostieni il progetto di ricerca il quale non riceve finanziamenti estern
|
||||
<outlet property="messageLabel" destination="SuO-hV-kUz" id="NaR-eN-Dko"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SeismicNotificationExpandedCell" rowHeight="530" id="C7v-rs-1fb" customClass="AlertsSeismicNotificationExpandedTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="188" width="414" height="530"/>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SeismicNotificationExpandedCell" rowHeight="580" id="C7v-rs-1fb" customClass="AlertsSeismicNotificationExpandedTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="188" width="414" height="580"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="C7v-rs-1fb" id="aEH-vE-u7m">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="530"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="580"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<subviews>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="TfA-6E-CQc">
|
||||
<rect key="frame" x="8" y="8" width="398" height="514"/>
|
||||
<rect key="frame" x="8" y="8" width="398" height="564"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Rilevato un sisma debole a 150 km (Test)" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="M7i-e5-N6v">
|
||||
<rect key="frame" x="8" y="8" width="382" height="67.5"/>
|
||||
@@ -1876,14 +1881,20 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<nil key="textColor"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="Onda sismica in 0 secondi" textAlignment="center" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="EiJ-Xy-eGg">
|
||||
<rect key="frame" x="8" y="138" width="382" height="33.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleTitle1"/>
|
||||
<color key="textColor" red="0.81894129514694214" green="0.15377968549728394" blue="0.11752084642648697" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<mapView clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="scaleToFill" mapType="standard" translatesAutoresizingMaskIntoConstraints="NO" id="tqM-QH-LJ3">
|
||||
<rect key="frame" x="0.0" y="138" width="398" height="151.5"/>
|
||||
<rect key="frame" x="0.0" y="181.5" width="398" height="158"/>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" relation="greaterThanOrEqual" constant="130" id="w6M-Ao-KHo"/>
|
||||
</constraints>
|
||||
</mapView>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="fillEqually" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Q2V-3p-DUh">
|
||||
<rect key="frame" x="8" y="297.5" width="382" height="40"/>
|
||||
<rect key="frame" x="8" y="347.5" width="382" height="40"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="V2G-UH-Ibe" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="187" height="40"/>
|
||||
@@ -1911,7 +1922,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Jwx-kf-che" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="8" y="345.5" width="382" height="40"/>
|
||||
<rect key="frame" x="8" y="395.5" width="382" height="40"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<state key="normal" title="VIEW ON TWITTER">
|
||||
<color key="titleColor" name="Gray (dark)"/>
|
||||
@@ -1921,13 +1932,13 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</button>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="The magnitude will be estimated by the national seismic network and it will appear in the Seismic Networks tab of the app" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="GIh-sK-KX1">
|
||||
<rect key="frame" x="8" y="393.5" width="382" height="64.5"/>
|
||||
<rect key="frame" x="8" y="443.5" width="382" height="64.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<color key="textColor" name="Gray (dark)"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="3Ga-UF-Cr7" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="8" y="466" width="382" height="40"/>
|
||||
<rect key="frame" x="8" y="516" width="382" height="40"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<state key="normal" title="CLOSE">
|
||||
<color key="titleColor" name="Gray (dark)"/>
|
||||
@@ -1939,6 +1950,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</subviews>
|
||||
<color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
<constraint firstItem="EiJ-Xy-eGg" firstAttribute="leading" secondItem="DyB-fs-sPo" secondAttribute="leading" id="0D0-8a-es0"/>
|
||||
<constraint firstItem="3Ga-UF-Cr7" firstAttribute="trailing" secondItem="GIh-sK-KX1" secondAttribute="trailing" id="1qg-dS-vGZ"/>
|
||||
<constraint firstItem="DyB-fs-sPo" firstAttribute="top" secondItem="M7i-e5-N6v" secondAttribute="bottom" constant="12" id="7gG-Y2-tda"/>
|
||||
<constraint firstAttribute="trailing" secondItem="GIh-sK-KX1" secondAttribute="trailing" constant="8" id="8TC-4t-7fC"/>
|
||||
@@ -1947,7 +1959,9 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<constraint firstItem="Jwx-kf-che" firstAttribute="trailing" secondItem="Q2V-3p-DUh" secondAttribute="trailing" id="Qie-q3-No5"/>
|
||||
<constraint firstItem="Q2V-3p-DUh" firstAttribute="top" secondItem="tqM-QH-LJ3" secondAttribute="bottom" constant="8" id="TM2-ig-acw"/>
|
||||
<constraint firstItem="Jwx-kf-che" firstAttribute="top" secondItem="Q2V-3p-DUh" secondAttribute="bottom" constant="8" id="Wjc-dF-bMj"/>
|
||||
<constraint firstItem="EiJ-Xy-eGg" firstAttribute="top" secondItem="DyB-fs-sPo" secondAttribute="bottom" constant="8" symbolic="YES" id="WmP-6W-zmO"/>
|
||||
<constraint firstAttribute="trailing" secondItem="M7i-e5-N6v" secondAttribute="trailing" constant="8" id="XHM-kN-PXl"/>
|
||||
<constraint firstItem="tqM-QH-LJ3" firstAttribute="top" secondItem="EiJ-Xy-eGg" secondAttribute="bottom" constant="10" id="YLd-fM-sXj"/>
|
||||
<constraint firstItem="3Ga-UF-Cr7" firstAttribute="leading" secondItem="GIh-sK-KX1" secondAttribute="leading" id="YhB-av-ejA"/>
|
||||
<constraint firstItem="DyB-fs-sPo" firstAttribute="leading" secondItem="M7i-e5-N6v" secondAttribute="leading" id="ZHJ-oa-DjC"/>
|
||||
<constraint firstItem="Jwx-kf-che" firstAttribute="height" secondItem="Q2V-3p-DUh" secondAttribute="height" id="Zp0-Q0-p0q"/>
|
||||
@@ -1956,12 +1970,13 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<constraint firstItem="tqM-QH-LJ3" firstAttribute="leading" secondItem="TfA-6E-CQc" secondAttribute="leading" id="gUO-ka-XvB"/>
|
||||
<constraint firstAttribute="bottom" secondItem="3Ga-UF-Cr7" secondAttribute="bottom" constant="8" id="gWA-6h-HmJ"/>
|
||||
<constraint firstItem="DyB-fs-sPo" firstAttribute="trailing" secondItem="M7i-e5-N6v" secondAttribute="trailing" id="jD7-QV-p8s"/>
|
||||
<constraint firstItem="EiJ-Xy-eGg" firstAttribute="centerX" secondItem="DyB-fs-sPo" secondAttribute="centerX" id="myj-Jc-qIB"/>
|
||||
<constraint firstItem="GIh-sK-KX1" firstAttribute="top" secondItem="Jwx-kf-che" secondAttribute="bottom" constant="8" id="nJj-g4-TSs"/>
|
||||
<constraint firstItem="3Ga-UF-Cr7" firstAttribute="top" secondItem="GIh-sK-KX1" secondAttribute="bottom" constant="8" id="qaQ-zK-ael"/>
|
||||
<constraint firstItem="M7i-e5-N6v" firstAttribute="leading" secondItem="TfA-6E-CQc" secondAttribute="leading" constant="8" id="rsV-dp-eqa"/>
|
||||
<constraint firstItem="M7i-e5-N6v" firstAttribute="top" secondItem="TfA-6E-CQc" secondAttribute="top" constant="8" id="seX-2q-JVM"/>
|
||||
<constraint firstItem="Jwx-kf-che" firstAttribute="leading" secondItem="Q2V-3p-DUh" secondAttribute="leading" id="tND-n7-uEb"/>
|
||||
<constraint firstItem="tqM-QH-LJ3" firstAttribute="top" secondItem="DyB-fs-sPo" secondAttribute="bottom" constant="8" id="tSy-qs-K1k"/>
|
||||
<constraint firstItem="EiJ-Xy-eGg" firstAttribute="trailing" secondItem="DyB-fs-sPo" secondAttribute="trailing" id="tle-8N-Ni3"/>
|
||||
<constraint firstItem="GIh-sK-KX1" firstAttribute="leading" secondItem="TfA-6E-CQc" secondAttribute="leading" constant="8" id="tsI-iu-M9g"/>
|
||||
</constraints>
|
||||
</view>
|
||||
@@ -1979,10 +1994,11 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<outlet property="mapView" destination="tqM-QH-LJ3" id="Gp4-gu-q8r"/>
|
||||
<outlet property="notificationDescriptionLabel" destination="DyB-fs-sPo" id="aLr-34-WND"/>
|
||||
<outlet property="notificationTitleLabel" destination="M7i-e5-N6v" id="RqD-wo-sXl"/>
|
||||
<outlet property="waveTimeLabel" destination="EiJ-Xy-eGg" id="1G6-Xz-Etc"/>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SeismicNotificationCell" rowHeight="180" id="vSa-gk-t22" customClass="AlertsSeismicNotificationCompactTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="718" width="414" height="180"/>
|
||||
<rect key="frame" x="0.0" y="768" width="414" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="vSa-gk-t22" id="qvZ-sA-Sqc">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="180"/>
|
||||
@@ -2001,7 +2017,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<rect key="frame" x="8" y="68" width="382" height="40"/>
|
||||
<subviews>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="BjK-4E-Vhw" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="382" height="40"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="187" height="40"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<state key="normal" title="TEST ALERT 🚨">
|
||||
<color key="titleColor" name="Gray (dark)"/>
|
||||
@@ -2010,8 +2026,8 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<action selector="testAlertTapped" destination="vSa-gk-t22" eventType="touchUpInside" id="HNp-eo-vpW"/>
|
||||
</connections>
|
||||
</button>
|
||||
<button hidden="YES" opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qkR-Lg-s4B" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="0.0" width="0.0" height="40"/>
|
||||
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="qkR-Lg-s4B" customClass="EQNRoundedButton" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="195" y="0.0" width="187" height="40"/>
|
||||
<color key="backgroundColor" white="1" alpha="0.5" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<state key="normal" title="SIMULATOR ⏱">
|
||||
<color key="titleColor" name="Gray (dark)"/>
|
||||
@@ -2082,7 +2098,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="PastEarthquakesCell" rowHeight="160" id="R3G-Bh-LLr" customClass="AlertsPastEartquakesTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="898" width="414" height="160"/>
|
||||
<rect key="frame" x="0.0" y="948" width="414" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="R3G-Bh-LLr" id="UH4-vm-Tld">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="160"/>
|
||||
@@ -2124,13 +2140,13 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" distribution="equalSpacing" alignment="center" spacing="4" translatesAutoresizingMaskIntoConstraints="NO" id="0O0-8K-ugz">
|
||||
<rect key="frame" x="0.0" y="29" width="129.5" height="25"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="Since 2013:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l5q-I9-iOb">
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Since 2013:" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="l5q-I9-iOb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="112" height="25"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="22"/>
|
||||
<color key="textColor" name="Gray (dark)"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lj5-Dk-elk">
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="0" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Lj5-Dk-elk">
|
||||
<rect key="frame" x="116" y="0.0" width="13.5" height="25"/>
|
||||
<fontDescription key="fontDescription" type="system" pointSize="22"/>
|
||||
<color key="textColor" name="Gray (dark)"/>
|
||||
@@ -2182,7 +2198,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="SmartphoneNetworkCell" rowHeight="180" id="YUf-dd-IFz" customClass="AlertsSmartphoneNetworkTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="1058" width="414" height="180"/>
|
||||
<rect key="frame" x="0.0" y="1108" width="414" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="YUf-dd-IFz" id="BkM-63-VOb">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="180"/>
|
||||
@@ -2264,7 +2280,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="PriorityCell" rowHeight="160" id="gXs-mo-UQM" customClass="AlertsPriorityServiceTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="1238" width="414" height="160"/>
|
||||
<rect key="frame" x="0.0" y="1288" width="414" height="160"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="gXs-mo-UQM" id="ViI-oT-s00">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="160"/>
|
||||
@@ -2283,17 +2299,17 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" distribution="fillProportionally" translatesAutoresizingMaskIntoConstraints="NO" id="zHS-h1-Tdo">
|
||||
<stackView opaque="NO" contentMode="scaleToFill" verticalHuggingPriority="251" verticalCompressionResistancePriority="751" axis="vertical" distribution="equalSpacing" translatesAutoresizingMaskIntoConstraints="NO" id="zHS-h1-Tdo">
|
||||
<rect key="frame" x="8" y="34" width="284" height="102"/>
|
||||
<subviews>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Be the first to be alerted when a quake is detected real time." textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="1mF-xh-GVj">
|
||||
<rect key="frame" x="0.0" y="0.0" width="284" height="51"/>
|
||||
<rect key="frame" x="0.0" y="0.0" width="284" height="42.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<color key="textColor" name="Gray (dark)"/>
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="A user has subscribed to the service only %d minute ago!" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="3dQ-Eh-0Iw">
|
||||
<rect key="frame" x="0.0" y="51" width="284" height="51"/>
|
||||
<rect key="frame" x="0.0" y="59.5" width="284" height="42.5"/>
|
||||
<fontDescription key="fontDescription" style="UICTFontTextStyleBody"/>
|
||||
<color key="textColor" name="Red"/>
|
||||
<nil key="highlightedColor"/>
|
||||
@@ -2345,7 +2361,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="default" indentationWidth="10" reuseIdentifier="ProVersionCell" rowHeight="130" id="oTE-5k-bAN" customClass="EQNBaseTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="1398" width="414" height="130"/>
|
||||
<rect key="frame" x="0.0" y="1448" width="414" height="130"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="oTE-5k-bAN" id="Axb-Lq-NhB">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="130"/>
|
||||
@@ -2406,7 +2422,7 @@ Sisma rilevato da 10 smartphone</string>
|
||||
</connections>
|
||||
</tableViewCell>
|
||||
<tableViewCell clipsSubviews="YES" contentMode="scaleToFill" preservesSuperviewLayoutMargins="YES" selectionStyle="none" indentationWidth="10" reuseIdentifier="PositionDataCell" rowHeight="180" id="j9i-Sk-o3g" customClass="AlertsPositionDataTableViewCell" customModule="Earthquake_Network" customModuleProvider="target">
|
||||
<rect key="frame" x="0.0" y="1528" width="414" height="180"/>
|
||||
<rect key="frame" x="0.0" y="1578" width="414" height="180"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" preservesSuperviewLayoutMargins="YES" insetsLayoutMarginsFromSafeArea="NO" tableViewCell="j9i-Sk-o3g" id="sTW-Bj-7Bz">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="180"/>
|
||||
@@ -2553,13 +2569,32 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<outlet property="tableView" destination="a35-sg-TCr" id="OhR-Ty-elu"/>
|
||||
<segue destination="rRh-R0-bas" kind="show" identifier="ShowProVersion" id="phk-Ww-RSV"/>
|
||||
<segue destination="cXN-cY-DjM" kind="show" identifier="ShowPrioritySubscriptions" id="yhm-9X-yNM"/>
|
||||
<segue destination="HV4-Bn-4kA" kind="show" identifier="ShowMap" id="HN8-eT-960"/>
|
||||
<segue destination="HV4-Bn-4kA" kind="presentation" identifier="ShowMap" id="HN8-eT-960"/>
|
||||
</connections>
|
||||
</viewController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="9hV-CI-LbC" userLabel="First Responder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-7691.3043478260879" y="-7441.0714285714284"/>
|
||||
</scene>
|
||||
<!--Navigation Controller-->
|
||||
<scene sceneID="kQU-hR-Qtg">
|
||||
<objects>
|
||||
<navigationController automaticallyAdjustsScrollViewInsets="NO" id="6Ia-ax-PLl" sceneMemberID="viewController">
|
||||
<toolbarItems/>
|
||||
<navigationItem key="navigationItem" id="fda-TG-1Z9"/>
|
||||
<navigationBar key="navigationBar" contentMode="scaleToFill" id="nEk-36-kMO">
|
||||
<rect key="frame" x="0.0" y="0.0" width="414" height="56"/>
|
||||
<autoresizingMask key="autoresizingMask"/>
|
||||
</navigationBar>
|
||||
<nil name="viewControllers"/>
|
||||
<connections>
|
||||
<segue destination="g91-vR-Oi1" kind="relationship" relationship="rootViewController" id="KfK-Za-MMz"/>
|
||||
</connections>
|
||||
</navigationController>
|
||||
<placeholder placeholderIdentifier="IBFirstResponder" id="Bu7-hO-QIb" userLabel="First Responder" customClass="UIResponder" sceneMemberID="firstResponder"/>
|
||||
</objects>
|
||||
<point key="canvasLocation" x="-7726.0869565217399" y="-5464.2857142857138"/>
|
||||
</scene>
|
||||
</scenes>
|
||||
<resources>
|
||||
<image name="eq_icon_pro" width="166" height="166"/>
|
||||
@@ -2594,54 +2629,6 @@ Sisma rilevato da 10 smartphone</string>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="groupTableViewBackgroundColor">
|
||||
<color red="0.94901960784313721" green="0.94901960784313721" blue="0.96862745098039216" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
<systemColor name="opaqueSeparatorColor">
|
||||
<color red="0.77647058823529413" green="0.77647058823529413" blue="0.78431372549019607" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
|
||||
</systemColor>
|
||||
|
||||
+5
-5
@@ -8,16 +8,16 @@
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "Costanti.h"
|
||||
#import <MapKit/MapKit.h>
|
||||
#import <GoogleMaps/GoogleMaps.h>
|
||||
#import "EQNSegnalazione.h"
|
||||
#import "EQNManager.h"
|
||||
#import "ReteSismicaAnnotation.h"
|
||||
#import "PickerViewController.h"
|
||||
#import "EQNMapAnnotationSeismicNetwork.h"
|
||||
#import "EQNUtility.h"
|
||||
#import "EQNPastquakes.h"
|
||||
#import "PickerViewController.h"
|
||||
#import "EQNBaseViewController.h"
|
||||
@import MapKit;
|
||||
|
||||
@interface DettagliMappaViewController : UIViewController <MKMapViewDelegate, PickerViewDelegate>
|
||||
@interface DettagliMappaViewController : EQNBaseViewController <MKMapViewDelegate>
|
||||
|
||||
@property (nonatomic, assign) EQNTipoDettagliMappa tipoMappa;
|
||||
@property (nonatomic, strong) IBOutlet MKMapView *mapView;
|
||||
|
||||
+4
-6
@@ -8,9 +8,7 @@
|
||||
|
||||
#import "DettagliMappaViewController.h"
|
||||
|
||||
|
||||
@interface DettagliMappaViewController ()
|
||||
|
||||
@interface DettagliMappaViewController () <PickerViewDelegate>
|
||||
|
||||
@property (nonatomic, strong) PickerViewController *pikerViewController;
|
||||
@property (nonatomic, strong) NSMutableArray *annotationArray;
|
||||
@@ -104,7 +102,7 @@
|
||||
if(!self.annotationArray)
|
||||
self.annotationArray = [NSMutableArray array];
|
||||
CLLocationCoordinate2D location = CLLocationCoordinate2DMake([segnalazione.latitude doubleValue], [segnalazione.longitude doubleValue]);
|
||||
ReteSismicaAnnotation *anAnnotation = [[ReteSismicaAnnotation alloc] initWithTitle:segnalazione.users location:location magnitudo:[segnalazione.intensity intValue]];
|
||||
EQNMapAnnotationSeismicNetwork *anAnnotation = [[EQNMapAnnotationSeismicNetwork alloc] initWithTitle:segnalazione.users location:location magnitudo:[segnalazione.intensity intValue]];
|
||||
[self.annotationArray addObject:anAnnotation];*/
|
||||
|
||||
}
|
||||
@@ -113,8 +111,8 @@
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation{
|
||||
/*
|
||||
if ([annotation isKindOfClass:[ReteSismicaAnnotation class]]) {
|
||||
ReteSismicaAnnotation *anLocation = (ReteSismicaAnnotation *)annotation;
|
||||
if ([annotation isKindOfClass:[EQNMapAnnotationSeismicNetwork class]]) {
|
||||
EQNMapAnnotationSeismicNetwork *anLocation = (EQNMapAnnotationSeismicNetwork *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_RETESMARTPHONE];
|
||||
if (annotationView == nil)
|
||||
annotationView = anLocation.annotationView;
|
||||
|
||||
@@ -7,13 +7,11 @@
|
||||
//
|
||||
|
||||
#import "PastquakesDettagliMappa.h"
|
||||
#import "PastquakesAnnotation.h"
|
||||
#import "EQNAdsUtility.h"
|
||||
#import "EQNMapAnnotationPastquakes.h"
|
||||
|
||||
@interface PastquakesDettagliMappa () <MKMapViewDelegate>
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray *annotationArray;
|
||||
@property (nonatomic, strong) GADBannerView *bannerView;
|
||||
|
||||
@end
|
||||
|
||||
@@ -24,7 +22,7 @@
|
||||
- (void)viewDidLoad
|
||||
{
|
||||
|
||||
self.filtroArray = @[NSLocalizedString(@"Ultimo anno", @""), NSLocalizedString(@"Ultimo mese", @""),NSLocalizedString(@"Ultima settimana", @""),NSLocalizedString(@"Ultimo giorno", @""),NSLocalizedString(@"Ultim\'ora", @"")];
|
||||
self.filtroArray = @[NSLocalizedString(@"Ultimo anno", @""), NSLocalizedString(@"Ultimo mese", @""),NSLocalizedString(@"Ultima settimana", @""),NSLocalizedString(@"Ultimo giorno", @""),NSLocalizedString(@"Ultim'ora", @"")];
|
||||
|
||||
[super viewDidLoad];
|
||||
// Do any additional setup after loading the view.
|
||||
@@ -39,8 +37,6 @@
|
||||
|
||||
[self.buttonAzione addTarget:self action:@selector(visualizzaPikerFiltro:) forControlEvents:UIControlEventTouchDown];
|
||||
[self applicaFiltroWithTime:@(2)];
|
||||
|
||||
self.bannerView = [EQNAdsUtility ottieniBannerWithController:self position:NO];
|
||||
}
|
||||
|
||||
- (void)creaMarcherWithSegnalazione:(id)segnalazione
|
||||
@@ -53,7 +49,7 @@
|
||||
EQNPastquakes *pasq = (EQNPastquakes *)segnalazione;
|
||||
|
||||
CLLocationCoordinate2D location = CLLocationCoordinate2DMake([pasq.latitude doubleValue], [pasq.longitude doubleValue]);
|
||||
PastquakesAnnotation *anAnnotation = [[PastquakesAnnotation alloc] initWithTitle:[NSString stringWithFormat:@"%@ %@ %@",NSLocalizedString(@"Sisma rilevato da", @"") ,pasq.users, NSLocalizedString(@"smartphones", @"")] location:location intensita:[pasq.intensity intValue]];
|
||||
EQNMapAnnotationPastquakes *anAnnotation = [[EQNMapAnnotationPastquakes alloc] initWithTitle:[NSString stringWithFormat:@"%@ %@ %@",NSLocalizedString(@"Sisma rilevato da", @"") ,pasq.users, NSLocalizedString(@"smartphones", @"")] location:location intensita:[pasq.intensity intValue]];
|
||||
[self.annotationArray addObject:anAnnotation];
|
||||
}
|
||||
|
||||
@@ -61,9 +57,9 @@
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
|
||||
{
|
||||
if ([annotation isKindOfClass:[PastquakesAnnotation class]]) {
|
||||
PastquakesAnnotation *anLocation = (PastquakesAnnotation *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_PASTQUAKES];
|
||||
if ([annotation isKindOfClass:[EQNMapAnnotationPastquakes class]]) {
|
||||
EQNMapAnnotationPastquakes *anLocation = (EQNMapAnnotationPastquakes *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:EQNMapAnnotationPastquakesIdentifier];
|
||||
if (annotationView == nil)
|
||||
annotationView = anLocation.annotationView;
|
||||
else
|
||||
|
||||
+6
-10
@@ -7,13 +7,11 @@
|
||||
//
|
||||
|
||||
#import "SegnalazioniUtenteDettagliMappa.h"
|
||||
#import "ReteSismicaAnnotation.h"
|
||||
#import "EQNAdsUtility.h"
|
||||
#import "EQNMapAnnotationSeismicNetwork.h"
|
||||
|
||||
@interface SegnalazioniUtenteDettagliMappa ()
|
||||
|
||||
@property (nonatomic, strong) NSMutableArray *annotationArray;
|
||||
@property (nonatomic, strong) GADBannerView *bannerView;
|
||||
|
||||
@end
|
||||
|
||||
@@ -44,9 +42,7 @@
|
||||
self.mapView.delegate = self;
|
||||
|
||||
[self.buttonAzione addTarget:self action:@selector(visualizzaPikerFiltro:) forControlEvents:UIControlEventTouchDown];
|
||||
[self applicaFiltroWithTime:@(0)];
|
||||
|
||||
self.bannerView = [EQNAdsUtility ottieniBannerWithController:self position:NO];
|
||||
[self applicaFiltroWithTime:@(0)];
|
||||
}
|
||||
|
||||
|
||||
@@ -63,16 +59,16 @@
|
||||
EQNSegnalazione *anSegnalazione = (EQNSegnalazione *)segnalazione;
|
||||
|
||||
CLLocationCoordinate2D location = CLLocationCoordinate2DMake([anSegnalazione.latitude doubleValue], [anSegnalazione.longitude doubleValue]);
|
||||
ReteSismicaAnnotation *anAnnotation = [[ReteSismicaAnnotation alloc] initWithTitle:anSegnalazione.address location:location magnitudo:[anSegnalazione.magnitude intValue]];
|
||||
EQNMapAnnotationSeismicNetwork *anAnnotation = [[EQNMapAnnotationSeismicNetwork alloc] initWithTitle:anSegnalazione.address location:location magnitudo:[anSegnalazione.magnitude intValue]];
|
||||
[self.annotationArray addObject:anAnnotation];
|
||||
|
||||
}
|
||||
|
||||
- (MKAnnotationView *)mapView:(MKMapView *)mapView viewForAnnotation:(id<MKAnnotation>)annotation
|
||||
{
|
||||
if ([annotation isKindOfClass:[ReteSismicaAnnotation class]]) {
|
||||
ReteSismicaAnnotation *anLocation = (ReteSismicaAnnotation *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:IDENTIFIER_ANNOTATION_RETESMARTPHONE];
|
||||
if ([annotation isKindOfClass:[EQNMapAnnotationSeismicNetwork class]]) {
|
||||
EQNMapAnnotationSeismicNetwork *anLocation = (EQNMapAnnotationSeismicNetwork *)annotation;
|
||||
MKAnnotationView *annotationView = [mapView dequeueReusableAnnotationViewWithIdentifier:EQNMapAnnotationSeismicNetworkIdentifier];
|
||||
if (annotationView == nil)
|
||||
annotationView = anLocation.annotationView;
|
||||
else
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
#import "LogViewController.h"
|
||||
#import "EQNManager.h"
|
||||
#import "EQMAccelerometroManager.h"
|
||||
#import "EQNAccelerometroManager.h"
|
||||
#import "EQNUser.h"
|
||||
|
||||
@interface LogViewController ()
|
||||
@@ -27,7 +27,7 @@
|
||||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(aggiornaLog:) name:@"AGGIORNA_LOG" object:nil];
|
||||
|
||||
[[EQNManager defaultManager] avviaManager];
|
||||
[[EQMAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
[[EQNAccelerometroManager sharedInstance] startUpdatingLocationBackground];
|
||||
|
||||
self.testo = [NSString stringWithFormat:@" LOG ID UTENTE %@\n\nTOKEN FIREBASE:\n%@\n\n", [EQNUser defaultUser].user_ID, [EQNUser defaultUser].tokenUser];
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
|
||||
|
||||
[[EQNManager defaultManager] stopManager];
|
||||
[[EQMAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
[[EQNAccelerometroManager sharedInstance] stopUpdatingLocation];
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
|
||||
[self dismissViewControllerAnimated:YES completion:nil];
|
||||
|
||||
@@ -1,40 +1,15 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
Earthquake Network
|
||||
|
||||
Created by Luca Beretta on 07/05/2019.
|
||||
Copyright © 2019 Luca Beretta. All rights reserved.
|
||||
*/
|
||||
/* No comment provided by engineer. */
|
||||
" 10000 persone allertate." = " 10,000 people alerted.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
" 100000 persone allertate." = " 100,000 people alerted.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"(Ora tua)" = "(Your time)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti annuali" = "Annual subscriptions";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti mensili" = "Monthly subscriptions";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 10000 persone " = "Annual subscription, priority 10,000 people";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 100000 persone " = "Annual subscription, priority 100,000 people ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 10000 persone " = "Monthly subscription, priority 10,000 people ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 100000 persone " = "Monthly subscription, priority 100,000 people ";
|
||||
|
||||
/* voce menu */
|
||||
"Abilitato" = "Enabled";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Alerta sismica" = "Seismic alert";
|
||||
|
||||
@@ -44,250 +19,63 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Altro" = "Other";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"ALTRO" = "OTHER";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Annulla" = "Cancel";
|
||||
|
||||
/* The name of the app to display in a navigation bar along with a placeholder for the SDK version number */
|
||||
"App.NameAndVersion" = "App.NameAndVersion";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Area di interesse" = "Area of interest";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione" = "Attention";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione " = "Attention ";
|
||||
|
||||
/* Back */
|
||||
"Back" = "Back";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"CHAT" = "CHAT";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"chiudi" = "close";
|
||||
|
||||
/* pulsante chiudi impostazioni */
|
||||
"Chiudi" = "Close";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CHIUDI" = "CLOSE";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"CONDIVIDI" = "SHARE APP";
|
||||
|
||||
/* allerta acquisto o restor pro */
|
||||
"Conferma" = "Confirm";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conferma nazione" = "Confirm country";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CONFIG" = "CONFIG";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Copertura" = "Coverage";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"dalla tua posizione" = "from your location";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data" = "Date";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data(Ora tua):" = "Date(Your time):";
|
||||
|
||||
/* Prompt to enter text for autocomplete demo */
|
||||
"Demo.Content.Autocomplete.EnterTextPrompt" = "Demo.Content.Autocomplete.EnterTextPrompt";
|
||||
|
||||
/* Format string for 'autocomplete failed with error' message */
|
||||
"Demo.Content.Autocomplete.FailedErrorMessage" = "Demo.Content.Autocomplete.FailedErrorMessage";
|
||||
|
||||
/* Button title for 'show autocomplete widget' */
|
||||
"Demo.Content.Autocomplete.ShowWidgetButton" = "Demo.Content.Autocomplete.ShowWidgetButton";
|
||||
|
||||
/* Button title for the 'BlueColors' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.BlueColors" = "Demo.Content.Autocomplete.Styling.Colors.BlueColors";
|
||||
|
||||
/* Button title for the 'Hot Dog Stand' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.HotDogStand" = "Demo.Content.Autocomplete.Styling.Colors.HotDogStand";
|
||||
|
||||
/* Button title for the 'WhiteOnBlack' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack" = "Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack";
|
||||
|
||||
/* Button title for the 'Yellow and Brown' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown" = "Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown";
|
||||
|
||||
/* String for 'autocomplete canceled message' */
|
||||
"Demo.Content.Autocomplete.WasCanceledMessage" = "Demo.Content.Autocomplete.WasCanceledMessage";
|
||||
|
||||
/* Button title for the 'Modal' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Modal" = "Demo.Content.PlacePicker.ViewController.Modal";
|
||||
|
||||
/* Button title for the 'Navigation' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Navigation" = "Demo.Content.PlacePicker.ViewController.Navigation";
|
||||
|
||||
/* Button title for the 'Popover' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Popover" = "Demo.Content.PlacePicker.ViewController.Popover";
|
||||
|
||||
/* Title of the autocomplete demo section */
|
||||
"Demo.Section.Title.Autocomplete" = "Demo.Section.Title.Autocomplete";
|
||||
|
||||
/* Title of the 'Programmatic' demo section */
|
||||
"Demo.Section.Title.Programmatic" = "Demo.Section.Title.Programmatic";
|
||||
|
||||
/* Title of the full-screen autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.FullScreen" = "Demo.Title.Autocomplete.FullScreen";
|
||||
|
||||
/* Title of the pushed autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Push" = "Demo.Title.Autocomplete.Push";
|
||||
|
||||
/* Title of the Styling autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Styling" = "Demo.Title.Autocomplete.Styling";
|
||||
|
||||
/* Title of the UISearchController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchController" = "Demo.Title.Autocomplete.UISearchController";
|
||||
|
||||
/* Title of the UISearchDisplayController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchDisplayController" = "Demo.Title.Autocomplete.UISearchDisplayController";
|
||||
|
||||
/* Title of the UITextField autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UITextField" = "Demo.Title.Autocomplete.UITextField";
|
||||
|
||||
/* Title of the photos demo for display in a list or nav header */
|
||||
"Demo.Title.Photos" = "Demo.Title.Photos";
|
||||
|
||||
/* Title of the 'select place' button within the photos demo */
|
||||
"Demo.Title.Photos.SelectPlace" = "Demo.Title.Photos.SelectPlace";
|
||||
|
||||
/* Title of the Place Picker demo for displaying the picker in a popover, navigation controller, or modally. */
|
||||
"Demo.Title.PlacePicker.ViewController" = "Demo.Title.PlacePicker.ViewController";
|
||||
|
||||
/* pulsante abbonamenti */
|
||||
"DETTAGLI" = "DETAILS";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione dei sismi" = "Important details on earthquake detection";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione di sismi" = "Important details on earthquake detection";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi attivi" = "smartphones monitoring in real time for earthquakes. To improve detection share the app with your family and friends, thanks!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi totali" = "At this time, in your area there are";
|
||||
|
||||
/* item tabelle */
|
||||
"Dispositivo affidabile" = "Reliable device";
|
||||
|
||||
/* voce menu */
|
||||
"Distanza" = "Distance";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"E-MAIL/SMS" = "E-MAIL/SMS";
|
||||
|
||||
/* voce menu */
|
||||
"Energia sisma" = "Earthquake energy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Errore sconosciuto" = "Unknown error";
|
||||
|
||||
/* messaggio errore richiesta apikey impianto */
|
||||
"Errore! Impossibile accedere all'impianto" = "Errore! Impossibile accedere all'impianto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Esci" = "Exit";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Età massima" = "Maximum age";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filtro" = "Filter";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Gestisci le reti sismiche" = "Manage seismic networks";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Il messaggio è già stato in viato, al momento non è possibile inviare una nuova segnalazione" = "The report has already been sent, at the moment it is not possible to send a new report";
|
||||
|
||||
/* voce menu */
|
||||
"Imposta volume" = "Set volume";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo allarme" = "Alarm interval";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo notifiche" = "Notification interval";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Isole Hawaii" = "Hawaii Islands";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Isole Hawaii" = "Hawaii Islands";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La magnitudo sarà calcola e cominicata dalla rete sismica nazionale e comparirà nella sezione Reti Sismiche dell'app." = "The magnitude will be calculated and reported by the national seismic network and will appear in the Seismic Networks section of the app.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua posizione geografica è sconosciuta e non è possibile segnalare il sisma" = "Your location is unknown and the earthquake cannot be reported";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua segnalazione è stata inviata correttamente" = "Your report has been sent correctly";
|
||||
|
||||
/* voce menu */
|
||||
"Lista notifiche" = "Notification list";
|
||||
|
||||
/* item tabelle */
|
||||
"Lista priorità - NUOVA!" = "Priority service";
|
||||
|
||||
/* voce menu */
|
||||
"Magnitudo" = "Magnitude";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"MAPPA" = "MAP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mappa" = "Map";
|
||||
|
||||
/* Maps SDK Demos */
|
||||
"Maps SDK Demos" = "Maps SDK Demos";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Mar dei Caraibi" = "Carribean Sea";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messaggio" = "Message";
|
||||
|
||||
/* item tabelle */
|
||||
"messaggio per utenti" = "message for users";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"METEO" = "WEATHER";
|
||||
|
||||
/* voce menu */
|
||||
"Modifica impostazioni" = "Change settings";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mondo" = "Globe";
|
||||
|
||||
/* messaggio assenza connesione */
|
||||
"Nessuna connessione" = "No Internet connection";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Nessuna sottoscrizione attiva. Nella lista delle persone da allertare " = "No active subscription.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Non hai seleziato nessuna nazione" = "You have not selected any country";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica anche sismi per i quali non è possibile stimare l'intensità" = "Also notifies earthquakes for which it is not possible to estimate the intensity";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica sismi di qualsiasi magnitudo se la distanza è inferiore a 50 km" = "Notify earthquakes of any magnitude if the distance is less than 50 km";
|
||||
|
||||
@@ -306,38 +94,15 @@
|
||||
voce menu */
|
||||
"Notifiche sismi" = "Earthquake notifications";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche sismi rilevati in tempo reale" = "Notifications of earthquake detected in real-time";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche tsunami" = "Tsunami notifications";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Oceano Pacifico" = "Pacific Ocean";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"oppure" = "otherwise";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di fine" = "Ending time";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di inizio" = "Starting time";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ora fa" = "hour ago";
|
||||
|
||||
/* voce menu */
|
||||
"Ora fine" = "Ending time";
|
||||
|
||||
/* voce menu */
|
||||
"Ora inizio" = "Starting time";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"pagerai al mese:" = "you will pay per month:";
|
||||
|
||||
@@ -347,9 +112,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profondità" = "Depth";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Puoi entrare a fare parte delle liste di priorità prime" = "You can join the priority list of the first";
|
||||
|
||||
/* voce elenco raggio sismi */
|
||||
"Qualsiasi distanza" = "Any distance";
|
||||
|
||||
@@ -365,12 +127,6 @@
|
||||
/* voce menu */
|
||||
"Raggio sismi lievi" = "Radius mild earthquakes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Repubblica Domenicana" = "Dominican Republic";
|
||||
|
||||
/* item tabelle */
|
||||
"Rete smartphone" = "Smartphone Network";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Reti sismiche" = "Seismic networks";
|
||||
@@ -381,99 +137,32 @@
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche dei sismi segnalati manualmente dagli utenti" = "Receive notifications of earthquakes manually reported by users";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche in tempo reale dei sismi rilevati dalla rete smartphone" = "Receive real-time notifications of earthquakes detected by the smartphone network";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche per i messaggi rilasciati dal Pacific Tsunami Warning Center" = "Receive notifications for messages released by the Pacific Tsunami Warning Center";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche solo in un intervallo del giorno" = "Receive notifications only in a range of day";
|
||||
|
||||
/* titolo navigation bar */
|
||||
"Rilevatore Terremoti" = "Earthquake Network";
|
||||
|
||||
/* Samples */
|
||||
"Samples" = "Samples";
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica" = "Download";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica " = "Download ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Se vuoi filtrare la lista dei sismi, seleziona la nazione in cui vivi" = "If you want to filter the list of earthquakes, select the country where you live";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Segnalazione " = "Report ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo annuale " = "You are subscribed to the 10'000 priority list, annual renewal ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo mensile " = "You are subscribed to the 10'000 priority list, monthly renewal ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo annuale " = "You are subscribed to the 100'000 priority list, annual renewal ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo mensile " = "You are subscribed to the 100'000 priority list, monthly renewal ";
|
||||
"Segnalazione" = "Report";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Seleziona" = "Select";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"sending" = "sending";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi da notificare" = "Earthquakes to report";
|
||||
|
||||
/* item tabelle */
|
||||
"Sismi rilevati da smartphone" = "Earthquakes detected by smartphones";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi senza intensità" = "Earthquakes without intensity";
|
||||
|
||||
/* messaggio errore richiesta dev_cmd */
|
||||
"Sì è verificato un errore sulla centralina" = "Sì è verificato un errore sulla centralina";
|
||||
|
||||
/* voce menu */
|
||||
"Solo sismi forti" = "Only strong earthquakes";
|
||||
|
||||
/* descrizione Top 10K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 1 secondo dal rilevamento del sistema" = "subscriptions still available to be alerted in less than 1 second from the earthquake";
|
||||
|
||||
/* descrizione Top 100K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 5 secondi dal rilevamento del sistema" = "subscriptions still available to be alerted in less than 5 seconds from the earthquake";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"SPONSOR" = "SPONSOR";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti forti" = "Strong earthquakes";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti vicini" = "Nearby earthquakes";
|
||||
|
||||
/* voce menu */
|
||||
"Testa allarme" = "Test alarm";
|
||||
|
||||
"testo utenti1" = "Is this app useful for you? Vote and support the app with 5 stars at";
|
||||
|
||||
"testo utenti2" = "thanks! Real time detection of quakes works better if the app is installed on many devices. Share the app with family and friends to improve detection.";
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Tipo messaggio" = "Message type";
|
||||
|
||||
/* voce menu */
|
||||
"Tono di allarme" = "Alarm tone";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"TRENS" = "TREND";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"TSUNAMI" = "TSUNAMI";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultim\'ora" = "Last hour";
|
||||
"Ultim'ora" = "Last hour";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultima settimana" = "Last week";
|
||||
@@ -487,42 +176,13 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Ultimo mese" = "Last month";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un anno" = "One year";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"un anno" = "one year";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un mese" = "One month";
|
||||
|
||||
/* voce menu */
|
||||
"Un sisma è simulato. Dovresti ricevere l'allerta e l'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l'invio della mail automatiche ai tuoi contatti per non allarmarli" = "Un sisma è simulato. Dovresti ricevere l'allerta e l'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l'invio della mail automatiche ai tuoi contatti per non allarmarli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un\'ora" = "One hour";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Una settimana" = "One week";
|
||||
|
||||
/* messaggio errore inserimento credenziali */
|
||||
"Username e Password sbagliati" = "Username e Password sbagliati";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VEDI IN TWITTER" = "SEE ON TWITTER";
|
||||
|
||||
/* etichetta versione app */
|
||||
"Versione" = "Version";
|
||||
|
||||
/* item tabelle */
|
||||
"Versione PRO" = "PRO version";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Vibrazioni e suono" = "Sound and vibration";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VOTA L'APP" = "Vote the app";
|
||||
|
||||
// Nazioni
|
||||
"Stati Uniti" = "United States";
|
||||
"Italia" = "Italy";
|
||||
"Spagna" = "Spain";
|
||||
@@ -545,16 +205,12 @@
|
||||
"India" = "India";
|
||||
"Altro" = "Other";
|
||||
|
||||
|
||||
/// notifiche
|
||||
|
||||
// notifiche
|
||||
"Allerta sismica in tempo reale" = "Real time seismic alert";
|
||||
"Segnalazione utente" = "User report";
|
||||
"Segnalazione da rete sismica" = "Seismic network report";
|
||||
|
||||
|
||||
/// notifiche body
|
||||
|
||||
// notifiche body
|
||||
"Rilevato sisma debole a" = "Mild quake detected at %@";
|
||||
"Rilevato sisma forte a" = "Strong quake detected at %@";
|
||||
"Rilevato sisma a" = "Quake detected at %@";
|
||||
@@ -567,8 +223,7 @@
|
||||
"Area di interesse: Oceano Pacifico" = "Area of interest: Pacific Ocean";
|
||||
"Sisma rilevato da" = "earthquake detected by";
|
||||
|
||||
|
||||
/// Voci menu
|
||||
// Voci menu
|
||||
"Impostazioni" = "Settings";
|
||||
"Informazioni" = "Information";
|
||||
"F.A.Q." = "F.A.Q.";
|
||||
@@ -589,14 +244,11 @@
|
||||
"purchase_pro_restore" = "Restore";
|
||||
"purchase_pro_restore_alert_title" = "Restore completed";
|
||||
"purchase_pro_restore_alert_message" = "You have restored the product you purchased";
|
||||
|
||||
"purchase_pro_no_subscriptions_alert_message" = "No purchase was found to restore. Make sure you are logged into the account the purchase was made with.";
|
||||
"inapp_available_10k" = "Top 10K: %lu subscriptions still available to be alerted in less than 1 second since the detection of the quake";
|
||||
"inapp_available_100k" = "Top 100K: %lu subscriptions still available to be alerted in less than 1 second since the detection of the quake";
|
||||
|
||||
|
||||
"• Il pagamento verrà addebitato sull'account iTunes alla conferma dell'acquisto\n\n• L'abbonamento si rinnova automaticamente a meno che il rinnovo automatico non venga disattivato almeno 24 ore prima della fine del periodo corrente\n\n• L'abbonamento verrà addebitato per il rinnovo entro 24 ore prima della fine del periodo corrente e identificato il costo del rinnovo\n\n• Le sottoscrizioni possono essere gestite dall'utente e il rinnovo automatico può essere disattivato accedendo alle Impostazioni account dell'utente dopo l'acquisto." = "";
|
||||
|
||||
|
||||
// settings
|
||||
"Magnitudo >= 0.0" = "Magnitude >= 0.0";
|
||||
"Magnitudo >= 0.5" = "Magnitude >= 0.5";
|
||||
@@ -620,7 +272,6 @@
|
||||
"Non attivare allarmi o notifiche in questo lasso di tempo" = "Do not disturb with alert or notifications in this time frame";
|
||||
|
||||
// Filtri sismi
|
||||
|
||||
"Magnitudo minima" = "Minumum magnitude";
|
||||
"Distanza massima" = "Maximum distance";
|
||||
"Periodo temporale" = "Time frame";
|
||||
@@ -654,6 +305,7 @@
|
||||
"share_notified" = "Reported through the app Earthquake Network. Download the app from https://sismo.app/download/ to receive real time alerts of #earthquake @SismoDetector";
|
||||
"manual_sure" = "Do you really want to notify an earthquake?";
|
||||
"manual_yes" = "Yes";
|
||||
"calendar_missing_permission" = "The calendar cannot be opened, make sure you have set the correct permissions.";
|
||||
|
||||
// Segnalazioni
|
||||
"manual_sendmessage" = "Send a message that the other users can read about the earthquake that you reported";
|
||||
@@ -678,3 +330,20 @@
|
||||
"hours_other" = "%lu hours ago";
|
||||
"days_one" = "%lu day ago";
|
||||
"days_other" = "%lu days ago";
|
||||
|
||||
// Simulatore
|
||||
"main_simulator" = "Simulator";
|
||||
"globe_simulation_button" = "Compute warning time";
|
||||
"globe_simulation" = "If the earthquake epicentre is outside the red disk and the quake is immediately detected by the smartphones, you will receive the alert more than 5 seconds in advance. Select on map the possible epicentre in order to compute the warning time.";
|
||||
"globe_simulation_inside" = "Select a location inside the green disk";
|
||||
"globe_simulation_outside" = "Select a location outside the red disk";
|
||||
"globe_simulation_message1" = "With this epicentre, you should receive the alert %.0f seconds in advance. However, %.0f people will be alerted before you. The warning time will be of %.0f seconds. By subscribing now to the TOP 10K priority service, only %.0f people will be alerted before you (in order of distance from the epicenter)";
|
||||
"globe_simulation_message2" = "With this epicentre, you should receive the alert %.0f seconds in advance. However, %.0f people will be alerted before you. You will receive the alert %.0f seconds after the seismic waves. By subscribing now to the TOP 10K priority service, only %.0f people will be alerted before you (in order of distance from the epicenter)";
|
||||
"globe_simulation_message3" = "With this epicentre, you should receive the alert %.0f seconds in advance. However, %.0f people will be alerted before you. By subscribing now to the TOP 10K priority service, only %.0f people will be alerted before you (in order of distance from the epicenter)";
|
||||
"globe_simulation_message4" = "With this epicentre, thanks to the %@ priority service you should receive the alert %.0f seconds in advance. Only %.0f people will be alerted before you.";
|
||||
"globe_simulation_message5" = "With this epicentre, thanks to the %@ priority service you should receive the alert %.0f seconds in advance. %.0f people will be alerted before you. To increase the warning time you can subscribe to the %@ priority service";
|
||||
"globe_simulation_message6" = "With this epicentre, thanks to the %@ priority service you should receive the alert %.0f seconds in advance. You will be the first to be alerted!";
|
||||
"globe_simulation_priority" = "Priority service";
|
||||
|
||||
"error_server_registration" = "It was not possible to register with the Earthquake Network server. Registration is required to receive real-time alerts and earthquake notifications.";
|
||||
"retry" = "Retry";
|
||||
|
||||
@@ -4,30 +4,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
" 100000 persone allertate." = " 100.000 personas alertadas.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"(Ora tua)" = "(Tu hora)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti annuali" = "Suscripciones anuales";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti mensili" = "Suscripciones mensuales";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 10000 persone " = "Suscripción anual, prioridad 10.000 personas ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 100000 persone " = "Suscripción anual, prioridad 100.000 personas ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 10000 persone " = "Suscripción mensual, prioridad 10.000 personas ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 100000 persone " = "Suscripción mensual, prioridad 100.000 personas ";
|
||||
|
||||
/* voce menu */
|
||||
"Abilitato" = "Activado";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Alerta sismica" = "Alerta sismica";
|
||||
|
||||
@@ -37,252 +19,63 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Altro" = "Otro";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"ALTRO" = "OTRO";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Annulla" = "Cancelar";
|
||||
|
||||
/* The name of the app to display in a navigation bar along with a placeholder for the SDK version number */
|
||||
"App.NameAndVersion" = "App.NameAndVersion";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Area di interesse" = "Área de interés";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione" = "Atención";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione " = "Atención ";
|
||||
|
||||
/* Back */
|
||||
"Back" = "Espalda";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"CHAT" = "CHAT";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"chiudi" = "cerra";
|
||||
|
||||
/* pulsante chiudi impostazioni */
|
||||
"Chiudi" = "Cerra";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CHIUDI" = "CERRA";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"CONDIVIDI" = "COMPARTA APP";
|
||||
|
||||
/* allerta acquisto o restor pro */
|
||||
"Conferma" = "Confirmar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conferma nazione" = "Confirmar pais";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CONFIG" = "CONFIG";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Copertura" = "Cobertura";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"dalla tua posizione" = "desde tu ubicación";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data" = "Fecha";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data(Ora tua):" = "Fecha(Tu tiempo):";
|
||||
|
||||
/* Prompt to enter text for autocomplete demo */
|
||||
"Demo.Content.Autocomplete.EnterTextPrompt" = "Demo.Content.Autocomplete.EnterTextPrompt";
|
||||
|
||||
/* Format string for 'autocomplete failed with error' message */
|
||||
"Demo.Content.Autocomplete.FailedErrorMessage" = "Demo.Content.Autocomplete.FailedErrorMessage";
|
||||
|
||||
/* Button title for 'show autocomplete widget' */
|
||||
"Demo.Content.Autocomplete.ShowWidgetButton" = "Demo.Content.Autocomplete.ShowWidgetButton";
|
||||
|
||||
/* Button title for the 'BlueColors' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.BlueColors" = "Demo.Content.Autocomplete.Styling.Colors.BlueColors";
|
||||
|
||||
/* Button title for the 'Hot Dog Stand' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.HotDogStand" = "Demo.Content.Autocomplete.Styling.Colors.HotDogStand";
|
||||
|
||||
/* Button title for the 'WhiteOnBlack' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack" = "Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack";
|
||||
|
||||
/* Button title for the 'Yellow and Brown' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown" = "Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown";
|
||||
|
||||
/* String for 'autocomplete canceled message' */
|
||||
"Demo.Content.Autocomplete.WasCanceledMessage" = "Demo.Content.Autocomplete.WasCanceledMessage";
|
||||
|
||||
/* Button title for the 'Modal' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Modal" = "Demo.Content.PlacePicker.ViewController.Modal";
|
||||
|
||||
/* Button title for the 'Navigation' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Navigation" = "Demo.Content.PlacePicker.ViewController.Navigation";
|
||||
|
||||
/* Button title for the 'Popover' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Popover" = "Demo.Content.PlacePicker.ViewController.Popover";
|
||||
|
||||
/* Title of the autocomplete demo section */
|
||||
"Demo.Section.Title.Autocomplete" = "Demo.Section.Title.Autocomplete";
|
||||
|
||||
/* Title of the 'Programmatic' demo section */
|
||||
"Demo.Section.Title.Programmatic" = "Demo.Section.Title.Programmatic";
|
||||
|
||||
/* Title of the full-screen autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.FullScreen" = "Demo.Title.Autocomplete.FullScreen";
|
||||
|
||||
/* Title of the pushed autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Push" = "Demo.Title.Autocomplete.Push";
|
||||
|
||||
/* Title of the Styling autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Styling" = "Demo.Title.Autocomplete.Styling";
|
||||
|
||||
/* Title of the UISearchController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchController" = "Demo.Title.Autocomplete.UISearchController";
|
||||
|
||||
/* Title of the UISearchDisplayController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchDisplayController" = "Demo.Title.Autocomplete.UISearchDisplayController";
|
||||
|
||||
/* Title of the UITextField autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UITextField" = "Demo.Title.Autocomplete.UITextField";
|
||||
|
||||
/* Title of the photos demo for display in a list or nav header */
|
||||
"Demo.Title.Photos" = "Demo.Title.Photos";
|
||||
|
||||
/* Title of the 'select place' button within the photos demo */
|
||||
"Demo.Title.Photos.SelectPlace" = "Demo.Title.Photos.SelectPlace";
|
||||
|
||||
/* Title of the Place Picker demo for displaying the picker in a popover, navigation controller, or modally. */
|
||||
"Demo.Title.PlacePicker.ViewController" = "Demo.Title.PlacePicker.ViewController";
|
||||
|
||||
/* pulsante abbonamenti */
|
||||
"DETTAGLI" = "DETALLES";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione dei sismi" = "Detalles importantes sobre la detección de sismos";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione di sismi" = "Detalles importantes sobre la detección de sismos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi attivi" = "smartphones que están monitoreando los sismos en tiempo real. Para mejorar la detección comparta la app con tus amigos y familia, gracias!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi totali" = "En este momento, en tu área hay";
|
||||
|
||||
/* item tabelle */
|
||||
"Dispositivo affidabile" = "Dispositivo confiable";
|
||||
|
||||
/* voce menu */
|
||||
"Distanza" = "Distancia";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"E-MAIL/SMS" = "E-MAIL/SMS";
|
||||
|
||||
/* voce menu */
|
||||
"Energia sisma" = "Energía del sismos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Errore sconosciuto" = "Error desconocido";
|
||||
|
||||
/* messaggio errore richiesta apikey impianto */
|
||||
"Errore! Impossibile accedere all'impianto" = "Errore! Impossibile accedere all'impianto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Esci" = "Salida";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Età massima" = "Edad maxima";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filtro" = "Filtro";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Gestisci le reti sismiche" = "Gestionar redes sísmicas";
|
||||
|
||||
"GESTISCI LE RETI SISMICHE" = "Gestionar redes sísmicas";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Il messaggio è già stato in viato, al momento non è possibile inviare una nuova segnalazione" = "El informe ya ha sido enviado, por el momento no es posible enviar un nuevo informe.";
|
||||
|
||||
/* voce menu */
|
||||
"Imposta volume" = "Ajustar el volumen";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo allarme" = "Intervalo de alarma";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo notifiche" = "Intervalo de notificación";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Isole Hawaii" = "Islas hawai";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Isole Hawaii" = "Islas hawai";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La magnitudo sarà calcola e cominicata dalla rete sismica nazionale e comparirà nella sezione Reti Sismiche dell'app." = "La magnitud será calculada e informada por la red sísmica nacional y aparecerá en la sección redes sísmicas de la aplicación.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua posizione geografica è sconosciuta e non è possibile segnalare il sisma" = "Tu ubicación es desconocida y el sismos no puede ser reportado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua segnalazione è stata inviata correttamente" = "Tu informe ha sido enviado correctamente";
|
||||
|
||||
/* voce menu */
|
||||
"Lista notifiche" = "Lista de notificaciones";
|
||||
|
||||
/* item tabelle */
|
||||
"Lista priorità - NUOVA!" = "Servicio prioritario";
|
||||
|
||||
/* voce menu */
|
||||
"Magnitudo" = "Magnitud";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"MAPPA" = "MAPA";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mappa" = "Mapa";
|
||||
|
||||
/* Maps SDK Demos */
|
||||
"Maps SDK Demos" = "Maps SDK Demos";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Mar dei Caraibi" = "Mar Caribe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messaggio" = "Mensaje";
|
||||
|
||||
/* item tabelle */
|
||||
"messaggio per utenti" = "mensaje para los usuarios";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"METEO" = "TIEMPO";
|
||||
|
||||
/* voce menu */
|
||||
"Modifica impostazioni" = "Cambiar ajustes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mondo" = "Globo";
|
||||
|
||||
/* messaggio assenza connesione */
|
||||
"Nessuna connessione" = "No hay conexión a internet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Nessuna sottoscrizione attiva. Nella lista delle persone da allertare " = "No hay suscripción activa.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Non hai seleziato nessuna nazione" = "No has seleccionado ningún país";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica anche sismi per i quali non è possibile stimare l'intensità" = "También notifica sismos para los que no es posible estimar la intensidad.";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica sismi di qualsiasi magnitudo se la distanza è inferiore a 50 km" = "Notificar sismos de cualquier magnitud si la distancia es inferior a 50 km";
|
||||
|
||||
@@ -301,38 +94,15 @@
|
||||
voce menu */
|
||||
"Notifiche sismi" = "Notificaciones de sismos";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche sismi rilevati in tempo reale" = "Notificaciones de sismos detectados en tiempo real.";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche tsunami" = "Notificaciones de tsunami";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Oceano Pacifico" = "Oceano Pacifico";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"oppure" = "de otra manera";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di fine" = "Hora de inicio";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di inizio" = "Hora de fine";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ora fa" = "hora";
|
||||
|
||||
/* voce menu */
|
||||
"Ora fine" = "Hora de fine";
|
||||
|
||||
/* voce menu */
|
||||
"Ora inizio" = "Hora de inicio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"pagerai al mese:" = "pagaras por mes:";
|
||||
|
||||
@@ -342,9 +112,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profondità" = "Profundidad";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Puoi entrare a fare parte delle liste di priorità prime" = "Puedes unirte a la lista de priorida de las primeras";
|
||||
|
||||
/* voce elenco raggio sismi */
|
||||
"Qualsiasi distanza" = "Cualquier distancia";
|
||||
|
||||
@@ -360,12 +127,6 @@
|
||||
/* voce menu */
|
||||
"Raggio sismi lievi" = "Radio sismos leves";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Repubblica Domenicana" = "Republica Dominicana";
|
||||
|
||||
/* item tabelle */
|
||||
"Rete smartphone" = "Red smartphone";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Reti sismiche" = "Redes sismicas";
|
||||
@@ -376,99 +137,32 @@
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche dei sismi segnalati manualmente dagli utenti" = "Recibe notificaciones de sismos reportados manualmente por los usuarios.";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche in tempo reale dei sismi rilevati dalla rete smartphone" = "Recibe notificaciones en tiempo real de los sismos detectados por la red de teléfonos inteligentes.";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche per i messaggi rilasciati dal Pacific Tsunami Warning Center" = "Recibe notificaciones de mensajes publicados por el Pacific Tsunami Warning Center";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche solo in un intervallo del giorno" = "Recibe notificaciones solo";
|
||||
|
||||
/* titolo navigation bar */
|
||||
"Rilevatore Terremoti" = "Sismo Detector";
|
||||
|
||||
/* Samples */
|
||||
"Samples" = "Samples";
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica" = "Download";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica " = "Download ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Se vuoi filtrare la lista dei sismi, seleziona la nazione in cui vivi" = "Si desea filtrar la lista de sismos, selecciona el país donde vive.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Segnalazione " = "Informe ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo annuale " = "Estás suscrito a la lista de prioridades de 10'000, renovación anual ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo mensile " = "Estás suscrito a la lista de prioridades de 10'000, renovación mensual ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo annuale " = "Estás suscrito a la lista de prioridades de 100'000, renovación anual ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo mensile " = "Estás suscrito a la lista de prioridades de 100'000, renovación mensual ";
|
||||
"Segnalazione" = "Informe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Seleziona" = "Seleccionar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"sending" = "enviando";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi da notificare" = "Sismos para informar";
|
||||
|
||||
/* item tabelle */
|
||||
"Sismi rilevati da smartphone" = "Sismos detectados por smartphones";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi senza intensità" = "Sismos sin intensidad";
|
||||
|
||||
/* messaggio errore richiesta dev_cmd */
|
||||
"Sì è verificato un errore sulla centralina" = "Sì è verificato un errore sulla centralina";
|
||||
|
||||
/* voce menu */
|
||||
"Solo sismi forti" = "Solo sismos fuertes";
|
||||
|
||||
/* descrizione Top 10K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 1 secondo dal rilevamento del sistema" = "suscripciones aún disponibles para ser alertados en menos de 1 segundo desde el sismo";
|
||||
|
||||
/* descrizione Top 100K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 5 secondi dal rilevamento del sistema" = "suscripciones aún disponibles para ser alertados en menos de 5 segundos desde el sismo";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"SPONSOR" = "SPONSOR";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti forti" = "Sismos fuertes";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti vicini" = "Sismos cercanos";
|
||||
|
||||
/* voce menu */
|
||||
"Testa allarme" = "Prueba alarma";
|
||||
|
||||
"testo utenti1" = "Esta app es útil para ti? Vota la app con 5 estrellas en";
|
||||
|
||||
"testo utenti2" = "gracias! Más personas tiene instalada la app, mejor funcionarán las alertas. Comparta la app para mejorar la detección en tiempo real.";
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Tipo messaggio" = "Tipo de mensaje";
|
||||
|
||||
/* voce menu */
|
||||
"Tono di allarme" = "Tono de alarma";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"TRENS" = "TENDENCIA";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"TSUNAMI" = "TSUNAMI";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultim\'ora" = "Ultima hora";
|
||||
"Ultim'ora" = "Ultima hora";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultima settimana" = "Ultima semana";
|
||||
@@ -482,45 +176,13 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Ultimo mese" = "Ultimo mes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un anno" = "Un año";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"un anno" = "un año";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un mese" = "Un mes";
|
||||
|
||||
/* voce menu */
|
||||
"Un sisma è simulato. Dovresti ricevere l'allerta e l'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l'invio della mail automatiche ai tuoi contatti per non allarmarli" = "Un sisma è simulato. Dovresti ricevere l'allerta e l'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l'invio della mail automatiche ai tuoi contatti per non allarmarli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un\'ora" = "Una hora";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Una settimana" = "Una semana";
|
||||
|
||||
/* messaggio errore inserimento credenziali */
|
||||
"Username e Password sbagliati" = "Username e Password sbagliati";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VEDI IN TWITTER" = "VER EN TWITTER";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Velocità vento: " = "Velocidad viento: ";
|
||||
|
||||
/* etichetta versione app */
|
||||
"Versione" = "Versión";
|
||||
|
||||
/* item tabelle */
|
||||
"Versione PRO" = "Versión PRO";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Vibrazioni e suono" = "Sonido y vibracion";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VOTA L'APP" = "Vota la app";
|
||||
|
||||
// Nazioni
|
||||
"Stati Uniti" = "Estados Unidos";
|
||||
"Italia" = "Italia";
|
||||
"Spagna" = "España";
|
||||
@@ -543,16 +205,12 @@
|
||||
"India" = "India";
|
||||
"Altro" = "Otro";
|
||||
|
||||
|
||||
/// notifiche
|
||||
|
||||
// notifiche
|
||||
"Allerta sismica in tempo reale" = "Alerta sísmica en tiempo real";
|
||||
"Segnalazione utente" = "Informe de usuario";
|
||||
"Segnalazione da rete sismica" = "Informe de red sísmica";
|
||||
"Allerta tsunami" = "Alerta de tsunami";
|
||||
|
||||
/// notifiche body
|
||||
|
||||
// notifiche body
|
||||
"Rilevato sisma debole a" = "Sismo leve detectado en %@";
|
||||
"Rilevato sisma forte a" = "Sismo fuerte detectado en %@";
|
||||
"Rilevato sisma a" = "Sismo detectado en %@";
|
||||
@@ -565,8 +223,7 @@
|
||||
"Area di interesse: Oceano Pacifico" = "Área de interés: Océano Pacífico";
|
||||
"Sisma rilevato da" = "terremoto detectado por";
|
||||
|
||||
|
||||
/// Voci menu
|
||||
// Voci menu
|
||||
"Impostazioni" = "Ajustes";
|
||||
"Informazioni" = "Información";
|
||||
"F.A.Q." = "F.A.Q.";
|
||||
@@ -587,7 +244,7 @@
|
||||
"purchase_pro_restore" = "Reiniciar";
|
||||
"purchase_pro_restore_alert_title" = "Restauración completada";
|
||||
"purchase_pro_restore_alert_message" = "Has restaurado el producto que compraste";
|
||||
|
||||
"purchase_pro_no_subscriptions_alert_message" = "No se encontró ninguna compra para restaurar. Asegúrese de haber iniciado sesión en la cuenta con la que realizó la compra.";
|
||||
"inapp_available_10k" = "Top 10K: %d suscripciones aún disponibles para recibir la alerta en menos de 1 segundo a partir de la detección del sismo";
|
||||
"inapp_available_100k" = "Top 100K: %d suscripciones aún disponibles para recibir la alerta en menos de 1 segundo a partir de la detección del sismo";
|
||||
|
||||
@@ -610,13 +267,11 @@
|
||||
"Magnitudo >= 7.0" = "Magnitud >= 7.0";
|
||||
"Magnitudo >= 7.5" = "Magnitud >= 7.5";
|
||||
|
||||
|
||||
"Suona un allarme quando un sisma è rilevato dalla rete smartphone" = "Activa una alarma cuando la red de teléfonos inteligentes detecta un sismo";
|
||||
"Attiva l'allerta anche su i sismi per i quali non è possibile stimare l'intensità" = "También activa la alerta de sismos para los cuales no es posible estimar la intensidad.";
|
||||
"Non attivare allarmi o notifiche in questo lasso di tempo" = "No molestar con alertas o notificaciones en este período de tiempo";
|
||||
|
||||
// Filtri sismi
|
||||
|
||||
"Magnitudo minima" = "Magnitud mínima";
|
||||
"Distanza massima" = "Distancia maxima";
|
||||
"Periodo temporale" = "Periodo de tiempo";
|
||||
@@ -650,6 +305,7 @@
|
||||
"share_notified" = "Reportado a través de la app Sismo Detector. Descarga la app desde https://sismo.app/download/ para recibir alertas de #sismo en tiempo real @SismoDetector";
|
||||
"manual_sure" = "¿Estas seguro de querer reportar un sismo?";
|
||||
"manual_yes" = "Sí";
|
||||
"calendar_missing_permission" = "El calendario no se puede abrir, asegúrese de haber configurado los permisos correctos.";
|
||||
|
||||
// Segnalazioni
|
||||
"manual_sendmessage" = "Enviar un mensaje que los demás usuarios puedan leer sobre el sismo que has notificado";
|
||||
@@ -674,3 +330,20 @@
|
||||
"hours_other" = "%lu horas";
|
||||
"days_one" = "%lu día";
|
||||
"days_other" = "%lu días";
|
||||
|
||||
// Simulatore
|
||||
"main_simulator" = "Simulador";
|
||||
"globe_simulation_button" = "Calcular el tiempo de alerta";
|
||||
"globe_simulation" = "Si el epicentro del sismo está fuera del disco rojo y los smartphones lo detectan de inmediato, recibirá la alerta con más de 5 segundos de anticipación. Seleccionas en el mapa el posible epicentro para calcular el tiempo de alerta.";
|
||||
"globe_simulation_inside" = "Seleccionas una ubicación dentro del disco verde";
|
||||
"globe_simulation_outside" = "Seleccionas una ubicación fuera del disco rojo";
|
||||
"globe_simulation_message1" = "Con este epicentro, deberías recibir la alerta %.0f segundos antes. Sin embargo, %.0f personas serán alertadas antes que tú. El tiempo de aviso será de %.0f segundos. Al suscribirse hoy al servicio de prioridad TOP 10K, solo %.0f personas recibirán la alerta antes que usted (en orden de distancia del epicentro)";
|
||||
"globe_simulation_message2" = "Con este epicentro, deberías recibir la alerta %.0f segundos antes. Sin embargo, %.0f personas serán alertadas antes que tú. Recibirá la alerta %.0f segundos después de las ondas sísmicas. Al suscribirse hoy al servicio de prioridad TOP 10K, solo %.0f personas recibirán la alerta antes que usted (en orden de distancia del epicentro)";
|
||||
"globe_simulation_message3" = "Con este epicentro, deberías recibir la alerta %.0f segundos antes. Sin embargo, %.0f personas serán alertadas antes que tú. Al suscribirse hoy al servicio de prioridad TOP 10K, solo %.0f personas recibirán la alerta antes que usted (en orden de distancia del epicentro)";
|
||||
"globe_simulation_message4" = "Con este epicentro, gracias al servicio de prioridad %@, deberías recibir la alerta %.0f segundos antes. Solo %.0f personas serán alertadas antes que tú";
|
||||
"globe_simulation_message5" = "Con este epicentro, gracias al servicio de prioridad %@, deberías recibir la alerta %.0f segundos antes. %.0f personas serán alertadas antes que tú. Para aumentar el tiempo de advertencia, puede suscribirse al servicio de prioridad %@";
|
||||
"globe_simulation_message6" = "Con este epicentro, gracias al servicio de prioridad %@, deberías recibir la alerta %.0f segundos antes. ¡Serás la primera persona en ser alertada!";
|
||||
"globe_simulation_priority" = "Servicio prioritario";
|
||||
|
||||
"error_server_registration" = "No fue posible registrarse en el servidor de Sismo Detector. Es necesario registrarse para recibir alertas en tiempo real y notificaciones de sismos";
|
||||
"retry" = "Riprova";
|
||||
|
||||
@@ -1,11 +1,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
" 10000 persone allertate." = " 10\'000 persone allertate.";
|
||||
" 10000 persone allertate." = " 10'000 persone allertate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
" 100000 persone allertate." = " 100\'000 persone allertate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"(Ora tua)" = "(Ora tua)";
|
||||
" 100000 persone allertate." = " 100'000 persone allertate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti annuali" = "Abbonamenti annuali";
|
||||
@@ -13,21 +10,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamenti mensili" = "Abbonamenti mensili";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 10000 persone " = "Abbonamento annuale, priorità 10\'000 persone ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento annuale, priorità 100000 persone " = "Abbonamento annuale, priorità 100\'000 persone ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 10000 persone " = "Abbonamento mensile, priorità 10\'000 persone ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Abbonamento mensile, priorità 100000 persone " = "Abbonamento mensile, priorità 100\'000 persone ";
|
||||
|
||||
/* voce menu */
|
||||
"Abilitato" = "Abilitato";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Alerta sismica" = "Alerta sismica";
|
||||
|
||||
@@ -37,250 +19,63 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Altro" = "Altro";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"ALTRO" = "ALTRO";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Annulla" = "Annulla";
|
||||
|
||||
/* The name of the app to display in a navigation bar along with a placeholder for the SDK version number */
|
||||
"App.NameAndVersion" = "App.NameAndVersion";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Area di interesse" = "Area di interesse";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione" = "Attenzione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Attenzione " = "Attenzione ";
|
||||
|
||||
/* Back */
|
||||
"Back" = "Back";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"CHAT" = "CHAT";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"chiudi" = "chiudi";
|
||||
|
||||
/* pulsante chiudi impostazioni */
|
||||
"Chiudi" = "Chiudi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CHIUDI" = "CHIUDI";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"CONDIVIDI" = "CONDIVIDI APP";
|
||||
|
||||
/* allerta acquisto o restor pro */
|
||||
"Conferma" = "Conferma";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conferma nazione" = "Conferma nazione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"CONFIG" = "CONFIG";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Copertura" = "Copertura";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"dalla tua posizione" = "dalla tua posizione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data" = "Data";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data(Ora tua):" = "Data(Ora tua):";
|
||||
|
||||
/* Prompt to enter text for autocomplete demo */
|
||||
"Demo.Content.Autocomplete.EnterTextPrompt" = "Demo.Content.Autocomplete.EnterTextPrompt";
|
||||
|
||||
/* Format string for 'autocomplete failed with error' message */
|
||||
"Demo.Content.Autocomplete.FailedErrorMessage" = "Demo.Content.Autocomplete.FailedErrorMessage";
|
||||
|
||||
/* Button title for 'show autocomplete widget' */
|
||||
"Demo.Content.Autocomplete.ShowWidgetButton" = "Demo.Content.Autocomplete.ShowWidgetButton";
|
||||
|
||||
/* Button title for the 'BlueColors' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.BlueColors" = "Demo.Content.Autocomplete.Styling.Colors.BlueColors";
|
||||
|
||||
/* Button title for the 'Hot Dog Stand' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.HotDogStand" = "Demo.Content.Autocomplete.Styling.Colors.HotDogStand";
|
||||
|
||||
/* Button title for the 'WhiteOnBlack' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack" = "Demo.Content.Autocomplete.Styling.Colors.WhiteOnBlack";
|
||||
|
||||
/* Button title for the 'Yellow and Brown' styled autocomplete widget. */
|
||||
"Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown" = "Demo.Content.Autocomplete.Styling.Colors.YellowAndBrown";
|
||||
|
||||
/* String for 'autocomplete canceled message' */
|
||||
"Demo.Content.Autocomplete.WasCanceledMessage" = "Demo.Content.Autocomplete.WasCanceledMessage";
|
||||
|
||||
/* Button title for the 'Modal' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Modal" = "Demo.Content.PlacePicker.ViewController.Modal";
|
||||
|
||||
/* Button title for the 'Navigation' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Navigation" = "Demo.Content.PlacePicker.ViewController.Navigation";
|
||||
|
||||
/* Button title for the 'Popover' view of the place picker. */
|
||||
"Demo.Content.PlacePicker.ViewController.Popover" = "Demo.Content.PlacePicker.ViewController.Popover";
|
||||
|
||||
/* Title of the autocomplete demo section */
|
||||
"Demo.Section.Title.Autocomplete" = "Demo.Section.Title.Autocomplete";
|
||||
|
||||
/* Title of the 'Programmatic' demo section */
|
||||
"Demo.Section.Title.Programmatic" = "Demo.Section.Title.Programmatic";
|
||||
|
||||
/* Title of the full-screen autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.FullScreen" = "Demo.Title.Autocomplete.FullScreen";
|
||||
|
||||
/* Title of the pushed autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Push" = "Demo.Title.Autocomplete.Push";
|
||||
|
||||
/* Title of the Styling autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.Styling" = "Demo.Title.Autocomplete.Styling";
|
||||
|
||||
/* Title of the UISearchController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchController" = "Demo.Title.Autocomplete.UISearchController";
|
||||
|
||||
/* Title of the UISearchDisplayController autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UISearchDisplayController" = "Demo.Title.Autocomplete.UISearchDisplayController";
|
||||
|
||||
/* Title of the UITextField autocomplete demo for display in a list or nav header */
|
||||
"Demo.Title.Autocomplete.UITextField" = "Demo.Title.Autocomplete.UITextField";
|
||||
|
||||
/* Title of the photos demo for display in a list or nav header */
|
||||
"Demo.Title.Photos" = "Demo.Title.Photos";
|
||||
|
||||
/* Title of the 'select place' button within the photos demo */
|
||||
"Demo.Title.Photos.SelectPlace" = "Demo.Title.Photos.SelectPlace";
|
||||
|
||||
/* Title of the Place Picker demo for displaying the picker in a popover, navigation controller, or modally. */
|
||||
"Demo.Title.PlacePicker.ViewController" = "Demo.Title.PlacePicker.ViewController";
|
||||
|
||||
/* pulsante abbonamenti */
|
||||
"DETTAGLI" = "DETTAGLI";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione dei sismi" = "Dettagli importanti sulla rilevazione dei sismi";
|
||||
|
||||
/* voce menu */
|
||||
"Dettagli importanti sulla rilevazione di sismi" = "Dettagli importanti sulla rilevazione dei sismi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi attivi" = "smartphone che stanno monitorando in tempo reale eventuali sismi. Condividi la app per migliorare il rilevamento.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Dispositivi totali" = "In questo momento, nella tua zona ci sono";
|
||||
|
||||
/* item tabelle */
|
||||
"Dispositivo affidabile" = "Dispositivo affidabile";
|
||||
|
||||
/* voce menu */
|
||||
"Distanza" = "Distanza";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"E-MAIL/SMS" = "E-MAIL/SMS";
|
||||
|
||||
/* voce menu */
|
||||
"Energia sisma" = "Energia sisma";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Errore sconosciuto" = "Errore sconosciuto";
|
||||
|
||||
/* messaggio errore richiesta apikey impianto */
|
||||
"Errore! Impossibile accedere all'impianto" = "Errore! Impossibile accedere all'impianto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Esci" = "Esci";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Età massima" = "Età massima";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filtro" = "Filtro";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Gestisci le reti sismiche" = "Gestisci le reti sismiche";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Il messaggio è già stato in viato, al momento non è possibile inviare una nuova segnalazione" = "La segnalazione è già stata inviata, al momento non è possibile inviare una nuova segnalazione";
|
||||
|
||||
/* voce menu */
|
||||
"Imposta volume" = "Imposta volume";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo allarme" = "Intervallo allarme";
|
||||
|
||||
/* voce menu */
|
||||
"Intervallo notifiche" = "Intervallo notifiche";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Isole Hawaii" = "Isole Hawaii";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Isole Hawaii" = "Isole Hawaii";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La magnitudo sarà calcola e cominicata dalla rete sismica nazionale e comparirà nella sezione Reti Sismiche dell'app." = "La magnitudo sarà calcola e cominicata dalla rete sismica nazionale e comparirà nella sezione Reti Sismiche dell\'app.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua posizione geografica è sconosciuta e non è possibile segnalare il sisma" = "La tua posizione geografica è sconosciuta e non è possibile segnalare il sisma";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"La tua segnalazione è stata inviata correttamente" = "La tua segnalazione è stata inviata correttamente";
|
||||
|
||||
/* voce menu */
|
||||
"Lista notifiche" = "Lista notifiche";
|
||||
|
||||
/* item tabelle */
|
||||
"Lista priorità - NUOVA!" = "Servizio priorità";
|
||||
|
||||
/* voce menu */
|
||||
"Magnitudo" = "Magnitudo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"MAPPA" = "MAPPA";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mappa" = "Mappa";
|
||||
|
||||
/* Maps SDK Demos */
|
||||
"Maps SDK Demos" = "Maps SDK Demos";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Mar dei Caraibi" = "Mar dei Caraibi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messaggio" = "Messaggio";
|
||||
|
||||
/* item tabelle */
|
||||
"messaggio per utenti" = "messaggio per utenti";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"METEO" = "METEO";
|
||||
|
||||
/* voce menu */
|
||||
"Modifica impostazioni" = "Modifica impostazioni";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Mondo" = "Mondo";
|
||||
|
||||
/* messaggio assenza connesione */
|
||||
"Nessuna connessione" = "Nessuna connessione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Nessuna sottoscrizione attiva. Nella lista delle persone da allertare " = "Nessuna sottoscrizione attiva.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Non hai seleziato nessuna nazione" = "Non hai seleziato nessuna nazione";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica anche sismi per i quali non è possibile stimare l'intensità" = "Notifica anche sismi per i quali non è possibile stimare l\'intensità";
|
||||
|
||||
/* voce menu */
|
||||
"Notifica sismi di qualsiasi magnitudo se la distanza è inferiore a 50 km" = "Notifica sismi di qualsiasi magnitudo se la distanza è inferiore a 50 km";
|
||||
|
||||
@@ -299,50 +94,24 @@
|
||||
voce menu */
|
||||
"Notifiche sismi" = "Notifiche sismi";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche sismi rilevati in tempo reale" = "Notifiche sismi rilevati in tempo reale";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Notifiche tsunami" = "Notifiche tsunami";
|
||||
|
||||
/* voce elenco aree tsunami */
|
||||
"Oceano Pacifico" = "Oceano Pacifico";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"OK" = "OK";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"oppure" = "oppure";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di fine" = "Ora di fine";
|
||||
|
||||
/* voce menu */
|
||||
"Ora di inizio" = "Ora di inizio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"ora fa" = "ora fa";
|
||||
|
||||
/* voce menu */
|
||||
"Ora fine" = "Ora fine";
|
||||
|
||||
/* voce menu */
|
||||
"Ora inizio" = "Ora inizio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"pagerai al mese:" = "pagerai al mese:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"pagerai all'anno:" = "pagerai all\'anno:";
|
||||
"pagerai all'anno:" = "pagerai all'anno:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profondità" = "Profondità";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Puoi entrare a fare parte delle liste di priorità prime" = "Puoi entrare a fare parte della lista di priorità delle prime";
|
||||
|
||||
/* voce elenco raggio sismi */
|
||||
"Qualsiasi distanza" = "Qualsiasi distanza";
|
||||
|
||||
@@ -358,12 +127,6 @@
|
||||
/* voce menu */
|
||||
"Raggio sismi lievi" = "Raggio sismi lievi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Repubblica Domenicana" = "Repubblica Domenicana";
|
||||
|
||||
/* item tabelle */
|
||||
"Rete smartphone" = "Rete smartphone";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Reti sismiche" = "Reti sismiche";
|
||||
@@ -374,100 +137,32 @@
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche dei sismi segnalati manualmente dagli utenti" = "Ricevi le notifiche dei sismi segnalati manualmente dagli utenti";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche in tempo reale dei sismi rilevati dalla rete smartphone" = "Ricevi le notifiche in tempo reale dei sismi rilevati dalla rete smartphone";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche per i messaggi rilasciati dal Pacific Tsunami Warning Center" = "Ricevi le notifiche per i messaggi rilasciati dal Pacific Tsunami Warning Center";
|
||||
|
||||
/* voce menu */
|
||||
"Ricevi le notifiche solo in un intervallo del giorno" = "Ricevi le notifiche solo in un intervallo del giorno";
|
||||
|
||||
/* titolo navigation bar */
|
||||
"Rilevatore Terremoti" = "Rilevatore Terremoto";
|
||||
|
||||
/* Samples */
|
||||
"Samples" = "Samples";
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica" = "Scarica";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scarica " = "Scarica ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Se vuoi filtrare la lista dei sismi, seleziona la nazione in cui vivi" = "Se vuoi filtrare la lista dei sismi, seleziona la nazione in cui vivi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Segnalazione " = "Segnalazione ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo annuale " = "Sei abbonato: priorità 10000 persone, rinnovo annuale ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 10000 persone, rinnovo mensile " = "Sei abbonato: priorità 10000 persone, rinnovo mensile ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo annuale " = "Sei abbonato: priorità 100000 persone, rinnovo annuale ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sei abbonato: priorità 100000 persone, rinnovo mensile " = "Sei abbonato: priorità 100000 persone, rinnovo mensile ";
|
||||
"Segnalazione" = "Segnalazione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Seleziona" = "Seleziona";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"sending" = "sending";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi da notificare" = "Sismi da notificare";
|
||||
|
||||
/* item tabelle */
|
||||
"Sismi rilevati da smartphone" = "Sismi rilevati da smartphone";
|
||||
|
||||
/* voce menu */
|
||||
"Sismi senza intensità" = "Sismi senza intensità";
|
||||
|
||||
/* messaggio errore richiesta dev_cmd */
|
||||
"Sì è verificato un errore sulla centralina" = "Sì è verificato un errore sulla centralina";
|
||||
|
||||
/* voce menu */
|
||||
"Solo sismi forti" = "Solo sismi forti";
|
||||
|
||||
/* descrizione Top 10K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 1 secondo dal rilevamento del sistema" = "sottoscrizioni ancora disponibiliper essere allertato in meno di 1 secondo dal rilevamento del sistema";
|
||||
|
||||
/* descrizione Top 100K */
|
||||
"sottoscrizioni ancora disponibiliper essere allertato in meno di 5 secondi dal rilevamento del sistema" = "sottoscrizioni ancora disponibiliper essere allertato in meno di 5 secondi dal rilevamento del sistema";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"SPONSOR" = "SPONSOR";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti forti" = "Sismi forti";
|
||||
|
||||
/* voce menu */
|
||||
"Terremoti vicini" = "Sismi vicini";
|
||||
|
||||
/* voce menu */
|
||||
"Testa allarme" = "Testa allarme";
|
||||
|
||||
"testo utenti1" = "Trovi questa app utile? Vota e supporta la app con 5 stelle su";
|
||||
|
||||
"testo utenti2" = "grazie! La rilevazione in tempo reale funziona se la app è installata su un numero sufficiente di smartphone. Condividi l'app per migliorare il rilevamento.";
|
||||
|
||||
/* titolo impostazioni notifiche
|
||||
voce menu */
|
||||
"Tipo messaggio" = "Tipo messaggio";
|
||||
|
||||
/* voce menu */
|
||||
"Tono di allarme" = "Tono di allarme";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"TRENS" = "TREND";
|
||||
|
||||
/* pulsanti orrizontale */
|
||||
"TSUNAMI" = "TSUNAMI";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultim\'ora" = "Ultim\'ora";
|
||||
"Ultim'ora" = "Ultim'ora";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ultima settimana" = "Ultima settimana";
|
||||
@@ -481,42 +176,13 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Ultimo mese" = "Ultimo mese";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un anno" = "Un anno";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"un anno" = "un anno";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un mese" = "Un mese";
|
||||
|
||||
/* voce menu */
|
||||
"Un sisma è simulato. Dovresti ricevere l'allerta e l'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l'invio della mail automatiche ai tuoi contatti per non allarmarli" = "Un sisma è simulato. Dovresti ricevere l\'allerta e l\'allarme dovrebbe suonare. Se attive, ricordati di disabilitare l\'invio della mail automatiche ai tuoi contatti per non allarmarli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Un\'ora" = "Un\'ora";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Una settimana" = "Una settimana";
|
||||
|
||||
/* messaggio errore inserimento credenziali */
|
||||
"Username e Password sbagliati" = "Username e Password sbagliati";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VEDI IN TWITTER" = "VEDI IN TWITTER";
|
||||
|
||||
/* etichetta versione app */
|
||||
"Versione" = "Versione";
|
||||
|
||||
/* item tabelle */
|
||||
"Versione PRO" = "Versione PRO";
|
||||
|
||||
/* titolo impostazioni notifiche */
|
||||
"Vibrazioni e suono" = "Vibrazioni e suono";
|
||||
|
||||
/* titolo pulsante notifica rete smartphone */
|
||||
"VOTA L'APP" = "VOTA L\'APP";
|
||||
|
||||
// Nazioni
|
||||
"Stati Uniti" = "Stati Uniti";
|
||||
"Italia" = "Italia";
|
||||
"Spagna" = "Spagna";
|
||||
@@ -539,15 +205,12 @@
|
||||
"India" = "India";
|
||||
"Altro" = "Altro";
|
||||
|
||||
|
||||
/// notifiche titolo
|
||||
|
||||
// notifiche titolo
|
||||
"Allerta sismica in tempo reale" = "Allerta sismica in tempo reale";
|
||||
"Segnalazione utente" = "Segnalazione utente";
|
||||
"Segnalazione da rete sismica" = "Segnalazione da rete sismica";
|
||||
|
||||
/// notifiche body
|
||||
|
||||
// notifiche body
|
||||
"Rilevato sisma debole a" = "Rilevato sisma debole a %@";
|
||||
"Rilevato sisma forte a" = "Rilevato sisma forte a %@";
|
||||
"Rilevato sisma a" = "Rilevato sisma a %@";
|
||||
@@ -560,7 +223,7 @@
|
||||
"Area di interesse: Oceano Pacifico" = "Area di interesse: Oceano Pacifico";
|
||||
"Sisma rilevato da" = "Sisma rilevato da";
|
||||
|
||||
/// Voci menu
|
||||
// Voci menu
|
||||
"Impostazioni" = "Impostazioni";
|
||||
"Informazioni" = "Informazioni";
|
||||
"F.A.Q." = "F.A.Q.";
|
||||
@@ -581,7 +244,7 @@
|
||||
"purchase_pro_restore" = "Ripristina";
|
||||
"purchase_pro_restore_alert_title" = "Ripristino effettuato";
|
||||
"purchase_pro_restore_alert_message" = "Hai ripristinato il prodotto da te acquistato";
|
||||
|
||||
"purchase_pro_no_subscriptions_alert_message" = "Attenzione, non è stato trovato alcun acquisto da ripristinare. Assicurati di essere collegato con l'account con il quale era stato effettuato l'acquisto.";
|
||||
"inapp_available_10k" = "Top 10K: %lu sottoscrizioni ancora disponibili per essere allertato in meno di 1 secondo dal rilevamento del sisma";
|
||||
"inapp_available_100k" = "Top 100K: %lu sottoscrizioni ancora disponibili per essere allertato in meno di 5 secondi dal rilevamento del sisma";
|
||||
|
||||
@@ -604,11 +267,10 @@
|
||||
"Magnitudo >= 7.5" = "Magnitudo >= 7.5";
|
||||
|
||||
"Suona un allarme quando un sisma è rilevato dalla rete smartphone" = "Suona un allarme quando un sisma è rilevato dalla rete smartphone";
|
||||
"Attiva l'allerta anche su i sismi per i quali non è possibile stimare l'intensità" = "Attiva l\'allerta anche sui sismi per i quali non è possibile stimare l\'intensità";
|
||||
"Attiva l'allerta anche su i sismi per i quali non è possibile stimare l'intensità" = "Attiva l'allerta anche sui sismi per i quali non è possibile stimare l'intensità";
|
||||
"Non attivare allarmi o notifiche in questo lasso di tempo" = "Non attivare allarmi o notifiche in questo lasso di tempo";
|
||||
|
||||
// Filtri sismi
|
||||
|
||||
"Magnitudo minima" = "Magnitudo minima";
|
||||
"Distanza massima" = "Distanza massima";
|
||||
"Periodo temporale" = "Periodo temporale";
|
||||
@@ -642,6 +304,7 @@
|
||||
"share_notified" = "Segnalato tramite la app Rilevatore Terremoto. Scarica la app da https://sismo.app/download/ per ricevere allerte #terremoto in tempo reale @SismoDetector";
|
||||
"manual_sure" = "Vuoi davvero segnalare un sisma?";
|
||||
"manual_yes" = "Sì";
|
||||
"calendar_missing_permission" = "Non è possibile aprire il calendario, assicurarsi di aver impostato i permessi corretti.";
|
||||
|
||||
// Segnalazioni
|
||||
"manual_sendmessage" = "Invia un messaggio che gli altri utenti possono leggere sul sisma che hai segnalato";
|
||||
@@ -666,3 +329,20 @@
|
||||
"hours_other" = "%lu ore fa";
|
||||
"days_one" = "%lu giorno fa";
|
||||
"days_other" = "%lu giorni fa";
|
||||
|
||||
// Simulatore
|
||||
"main_simulator" = "Simulatore";
|
||||
"globe_simulation_button" = "Calcola pre-allerta";
|
||||
"globe_simulation" = "Se l'epicentro del sisma è al di fuori del cerchio rosso ed è rilevato immediatamente dagli smartphone, potrai ricevere l'allerta con più di 5 secondi di anticipo. Seleziona su mappa il possibile epicentro del sisma per calcolare il tempo di pre-allerta.";
|
||||
"globe_simulation_inside" = "Seleziona un punto dentro il cerchio verde";
|
||||
"globe_simulation_outside" = "Seleziona un punto fuori dal cerchio rosso";
|
||||
"globe_simulation_message1" = "Con epicentro nella posizione scelta, dovresti ricevere l'allerta con %.0f secondi di anticipo. Tuttavia, prima di te devono essere allertate %.0f persone. Il tempo di preavviso sarà di %.0f secondi. Iscrivendoti oggi al servizio di priorità TOP 10K, solamente %.0f persone saranno allertate prima di te (in ordine di distanza dall'epicentro)";
|
||||
"globe_simulation_message2" = "Con epicentro nella posizione scelta, dovresti ricevere l'allerta con %.0f secondi di anticipo. Tuttavia, prima di te devono essere allertate %.0f persone. L'allerta sarà ricevuta con %.0f secondi di ritardo. Iscrivendoti oggi al servizio di priorità TOP 10K, solamente %.0f persone saranno allertate prima di te (in ordine di distanza dall'epicentro)";
|
||||
"globe_simulation_message3" = "Con epicentro nella posizione scelta, dovresti ricevere l'allerta con %.0f secondi di anticipo. Tuttavia, prima di te devono essere allertate %.0f persone. Iscrivendoti oggi al servizio di priorità TOP 10K, solamente %.0f persone saranno allertate prima di te (in ordine di distanza dall'epicentro)";
|
||||
"globe_simulation_message4" = "Con epicentro nella posizione scelta, grazie al servizio prioritario %@ dovresti ricevere l'allerta con %.0f secondi di anticipo. Prima di te devono essere allertate solo %.0f persone.";
|
||||
"globe_simulation_message5" = "Con epicentro nella posizione scelta, grazie al servizio prioritario %@ dovresti ricevere l'allerta con %.0f secondi di anticipo. Prima di te devono essere allertate %.0f persone. Puoi aumentare il tempo di pre-allerta iscrivendoti al servizio di priorità %@";
|
||||
"globe_simulation_message6" = "Con epicentro nella posizione scelta, grazie al servizio prioritario %@ dovresti ricevere l'allerta con %.0f secondi di anticipo. Sarai il primo ad essere allertato!";
|
||||
"globe_simulation_priority" = "Servizio priorità";
|
||||
|
||||
"error_server_registration" = "Non è stato possibile registrarsi al server di Rilevatore Terremoto. La registrazione è necessaria per ricevere allerte in tempo reale e notifiche sui sismi.";
|
||||
"retry" = "Riprova";
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
//
|
||||
// EQNGeneratoreURLServer.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "EQNCalibrazione.h"
|
||||
#import "EQNRilevamento.h"
|
||||
|
||||
@interface EQNGeneratoreURLServer : NSObject
|
||||
|
||||
+(NSURL *)urlDownloadDati;
|
||||
+(NSURL *)urlRegistrazione;
|
||||
+(NSURL *)urlPosizione;
|
||||
+(NSURL *)urlMessagioStatoSmartPhone:(EQNCalibrazione *)calibrazione rilevamento:(EQNRilevamento *)rilevamento;
|
||||
+(NSURL *)urlInvioMessagioTerremoto:(NSInteger )magnitudo withAdress:(NSString *)address;
|
||||
+(NSURL *)urlInvioCommentoTerremoto:(NSString *)commento codeMessage:(NSString *)code;
|
||||
+(NSURL *)urlInvioImpostazioniNotifiche;
|
||||
+(NSURL *)urlDownloadOfferTimeRemaining;
|
||||
+(NSURL *)urlAlertPushTest;
|
||||
|
||||
@end
|
||||
@@ -7,10 +7,10 @@
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import "EQNReteSmartphone.h"
|
||||
#import "EQNAreaCheck.h"
|
||||
|
||||
@class EQNSisma;
|
||||
@class EQNReteSmartphone;
|
||||
|
||||
@interface EQNManager : NSObject
|
||||
|
||||
|
||||
@@ -7,14 +7,12 @@
|
||||
//
|
||||
|
||||
#import "EQNManager.h"
|
||||
#import <UIKit/UIKit.h>
|
||||
#import "EQNCalibrazione.h"
|
||||
#import "EQNRilevamento.h"
|
||||
#import "EQNUser.h"
|
||||
#import "Costanti.h"
|
||||
#import "ServerRequest.h"
|
||||
#import "EQNGeneratoreURLServer.h"
|
||||
#import "EQNReteSmartphone.h"
|
||||
#import "EQNPastquakes.h"
|
||||
#import "EQNSegnalazione.h"
|
||||
#import "EQNSisma.h"
|
||||
@@ -62,7 +60,7 @@
|
||||
|
||||
- (void)scaricaDatiReteSmartphone
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadSmartphoneNetwork] richiesta:downloadDati success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadSmartphoneNetwork] richiesta:EQNTipoChiamataDownloadDati success:^(id result) {
|
||||
|
||||
self.rete_smartphone = [[EQNReteSmartphone alloc] initWithInfo:result];
|
||||
|
||||
@@ -74,7 +72,7 @@
|
||||
|
||||
- (void)scaricaAreaCheck
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?lat=%f&lon=%f", EQNServerUrlDownloadAreaCheck, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude]] richiesta:areaCheck success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@?lat=%f&lon=%f", EQNServerUrlDownloadAreaCheck, [EQNUser defaultUser].lastPosition.coordinate.latitude, [EQNUser defaultUser].lastPosition.coordinate.longitude]] richiesta:EQNTipoChiamataAreaCheck success:^(id result) {
|
||||
|
||||
self.area_check = [[EQNAreaCheck alloc] initWithInfo:result];
|
||||
|
||||
@@ -87,7 +85,7 @@
|
||||
|
||||
- (void)scaricaPastquakes
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadPastQuakes] richiesta:pastquakes success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadPastQuakes] richiesta:EQNTipoChiamataPastquakes success:^(id result) {
|
||||
|
||||
NSMutableArray *arryTemp = [NSMutableArray array];
|
||||
for (NSDictionary *dic in result) {
|
||||
@@ -103,7 +101,7 @@
|
||||
|
||||
- (void)scaricaSegnalazioniManuali
|
||||
{
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadUserReports] richiesta:segnalazioneManuale success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:[NSURL URLWithString:EQNServerUrlDownloadUserReports] richiesta:EQNTipoChiamataSegnalazioneManuale success:^(id result) {
|
||||
|
||||
NSMutableArray *array = [NSMutableArray array];
|
||||
NSArray *tempArray = (NSArray *)result;
|
||||
@@ -147,7 +145,7 @@
|
||||
NSURL *url = [NSURL URLWithString:urlString];
|
||||
NSLog(@"[EQNManager] Url utilizzato per download reti sismiche: %@", url.absoluteURL);
|
||||
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:downloadDati success:^(id result) {
|
||||
[[ServerRequest defaultServerConnectionSingleton] inviaInformazioniAlServerWithURL:url richiesta:EQNTipoChiamataDownloadDati success:^(id result) {
|
||||
|
||||
NSMutableArray *array = [NSMutableArray array];
|
||||
for (NSDictionary *dic in result) {
|
||||
@@ -158,7 +156,7 @@
|
||||
|
||||
[EQNUtility storeArray:array toUserDefaultForKey:EQNUserDefaultSeismicNetworkCards];
|
||||
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:EQNNotificationDidDownloadData object:nil userInfo:nil];
|
||||
[[NSNotificationCenter defaultCenter] postNotificationName:EQNDownloadDataDidCompleteNotification object:nil userInfo:nil];
|
||||
} failure:^(NSError * error) {
|
||||
NSLog(@"[EQNManager] Download reti sismiche fallito. Errore: %@", error.localizedDescription);
|
||||
}];
|
||||
@@ -314,7 +312,7 @@
|
||||
}
|
||||
|
||||
switch (ril.rilievo) {
|
||||
case positivo:{
|
||||
case EQNRilevamentoSogliaPositivo:{
|
||||
[self performSelectorOnMainThread:@selector(iniviaMessaggioAlServer:)
|
||||
withObject:ril
|
||||
waitUntilDone:YES];
|
||||
@@ -322,7 +320,7 @@
|
||||
self.calibrazione = nil;
|
||||
}
|
||||
break;
|
||||
case negativo:
|
||||
case EQNRilevamentoSogliaNegativo:
|
||||
/* [self performSelectorOnMainThread:@selector(riavviaRilevamento)
|
||||
withObject:nil
|
||||
waitUntilDone:YES];*/
|
||||
@@ -345,10 +343,10 @@
|
||||
|
||||
- (void)iniviaMessaggioAlServer:(EQNRilevamento *)anRilevamento
|
||||
{
|
||||
EQNTipoChiamata tipo = calibrazione;
|
||||
EQNTipoChiamata tipo = EQNTipoChiamataCalibrazione;
|
||||
EQNCalibrazione *anCalibrazione = [self.calibrazione copy];
|
||||
if (anRilevamento.rilievo == positivo){
|
||||
tipo = rilevamento;
|
||||
if (anRilevamento.rilievo == EQNRilevamentoSogliaPositivo){
|
||||
tipo = EQNTipoChiamataRilevamento;
|
||||
[self annullaCalibrazione];
|
||||
}
|
||||
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
//
|
||||
// EQNReteSmartphone.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 09/10/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
@interface EQNReteSmartphone : NSObject
|
||||
|
||||
@property (nonatomic, strong) NSString *eq;
|
||||
@property (nonatomic, strong) NSString *eq_p;
|
||||
@property (nonatomic, strong) NSNumber *green;
|
||||
@property (nonatomic, strong) NSNumber *g_man;
|
||||
@property (nonatomic, strong) NSNumber *y_man;
|
||||
@property (nonatomic, strong) NSNumber *r_man;
|
||||
@property (nonatomic, strong) NSString *diff;
|
||||
@property (nonatomic) BOOL subscriptionsDiscounted;
|
||||
|
||||
- (instancetype)initWithInfo:(NSArray *)list;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -1,82 +0,0 @@
|
||||
//
|
||||
// EQNReteSmartphone.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 09/10/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQNReteSmartphone.h"
|
||||
|
||||
@implementation EQNReteSmartphone
|
||||
|
||||
#pragma mark - Init
|
||||
|
||||
- (instancetype)initWithInfo:(NSArray *)list
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
for ( int i = 0; i < list.count; i++) {
|
||||
NSDictionary *dict = list[i];
|
||||
switch (i) {
|
||||
case 0:
|
||||
_eq = dict[@"eq"];
|
||||
break;
|
||||
case 1:
|
||||
_eq_p = dict[@"eq_p"];
|
||||
break;
|
||||
case 2:
|
||||
_green = dict[@"green"];
|
||||
break;
|
||||
case 3:
|
||||
_g_man = dict[@"g_man"];
|
||||
break;
|
||||
case 4:
|
||||
_y_man = dict[@"y_man"];
|
||||
break;
|
||||
case 5:
|
||||
_r_man = dict[@"r_man"];
|
||||
break;
|
||||
case 6:
|
||||
_diff = dict[@"diff"];
|
||||
break;
|
||||
case 7:
|
||||
self.subscriptionsDiscounted = [dict[@"st"] boolValue];
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
#pragma mark - NSCoding
|
||||
|
||||
- (void)encodeWithCoder:(NSCoder *)encoder
|
||||
{
|
||||
[encoder encodeObject:self.eq forKey:@"eq"];
|
||||
[encoder encodeObject:self.eq_p forKey:@"eq_p"];
|
||||
[encoder encodeObject:self.green forKey:@"green"];
|
||||
[encoder encodeObject:self.g_man forKey:@"g_man"];
|
||||
[encoder encodeObject:self.y_man forKey:@"y_man"];
|
||||
[encoder encodeObject:self.r_man forKey:@"r_man"];
|
||||
[encoder encodeObject:self.diff forKey:@"diff"];
|
||||
}
|
||||
|
||||
- (instancetype)initWithCoder:(NSCoder *)decoder
|
||||
{
|
||||
self = [super init];
|
||||
if (self) {
|
||||
self.eq = [decoder decodeObjectForKey:@"eq"];
|
||||
self.eq_p = [decoder decodeObjectForKey:@"eq_p"];
|
||||
self.green = [decoder decodeObjectForKey:@"green"];
|
||||
self.g_man = [decoder decodeObjectForKey:@"g_man"];
|
||||
self.y_man = [decoder decodeObjectForKey:@"y_man"];
|
||||
self.r_man = [decoder decodeObjectForKey:@"r_man"];
|
||||
self.diff = [decoder decodeObjectForKey:@"diff"];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -1,39 +0,0 @@
|
||||
//
|
||||
// EQNRilevamento.m
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 19/09/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import "EQNRilevamento.h"
|
||||
#import <CoreMotion/CoreMotion.h>
|
||||
#import "EQNMath.h"
|
||||
#import "EQMAccelerometroManager.h"
|
||||
|
||||
@implementation EQNRilevamento
|
||||
|
||||
+(void)startRilevamentoWithCalibrazione:(EQNCalibrazione *)cal result:(void(^)(EQNRilevamento *ril))rilevamento{
|
||||
|
||||
if (!cal)
|
||||
rilevamento(NULL);
|
||||
|
||||
[EQMAccelerometroManager avviaLetturaAccellerometroIsCalibrazione:NO withCompletion:^(NSArray *dati) {
|
||||
|
||||
EQNRilevamento *anRilievo = [[EQNRilevamento alloc] init];
|
||||
anRilievo.media = [[EQNMath meanOf:dati] floatValue];
|
||||
anRilievo.deviazione = [[EQNMath standardDeviationOf:dati] floatValue];
|
||||
NSDictionary *rDic = [EQNMath rLimiti:dati];
|
||||
float max = [rDic[rMax] floatValue] - cal.media;
|
||||
anRilievo.maxAssoluto = fabsf(max);
|
||||
if (anRilievo.deviazione > SOGLIA_DEVIAZIONE_RILIEVO*cal.deviazione)
|
||||
anRilievo.rilievo = positivo;
|
||||
else
|
||||
anRilievo.rilievo = negativo;
|
||||
|
||||
anRilievo.timestamp = [NSDate date];
|
||||
rilevamento(anRilievo);
|
||||
|
||||
}];
|
||||
}
|
||||
@end
|
||||
@@ -1,22 +0,0 @@
|
||||
//
|
||||
// ReteSismicaAnnotation.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 01/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MapKit/MapKit.h>
|
||||
#import "Costanti.h"
|
||||
|
||||
@interface ReteSismicaAnnotation : NSObject <MKAnnotation>
|
||||
|
||||
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
|
||||
@property (nonatomic, copy) NSString *title;
|
||||
@property (nonatomic, readonly) int magnitude;
|
||||
|
||||
-(id)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate magnitudo:(int)magnitude;
|
||||
-(MKAnnotationView *)annotationView ;
|
||||
|
||||
@end
|
||||
@@ -1,22 +0,0 @@
|
||||
//
|
||||
// SismaAnnotation.h
|
||||
// Earthquake Network
|
||||
//
|
||||
// Created by Luca Beretta on 08/11/18.
|
||||
// Copyright © 2018 Luca Beretta. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MapKit/MapKit.h>
|
||||
#import "Costanti.h"
|
||||
|
||||
@interface SismaAnnotation : NSObject <MKAnnotation>
|
||||
|
||||
@property (nonatomic, readonly) CLLocationCoordinate2D coordinate;
|
||||
@property (nonatomic, copy) NSString *title;
|
||||
@property (nonatomic, readonly) double magnitude;
|
||||
|
||||
-(id)initWithTitle:(NSString *)title location:(CLLocationCoordinate2D )coordinate intensita:(double)magnitude;
|
||||
-(MKAnnotationView *)annotationView ;
|
||||
|
||||
@end
|
||||
@@ -7,8 +7,6 @@ target 'Earthquake Network' do
|
||||
pod 'Firebase/Core'
|
||||
pod 'Firebase/Messaging'
|
||||
pod 'Firebase/Crashlytics'
|
||||
pod 'GoogleMaps'
|
||||
pod 'GooglePlaces'
|
||||
pod 'Google-Mobile-Ads-SDK'
|
||||
pod 'DZNEmptyDataSet'
|
||||
pod 'Solar'
|
||||
|
||||
+89
-106
@@ -1,103 +1,94 @@
|
||||
PODS:
|
||||
- DZNEmptyDataSet (1.8.1)
|
||||
- Firebase/Core (6.34.0):
|
||||
- Firebase/Core (7.6.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseAnalytics (= 6.9.0)
|
||||
- Firebase/CoreOnly (6.34.0):
|
||||
- FirebaseCore (= 6.10.4)
|
||||
- Firebase/Crashlytics (6.34.0):
|
||||
- FirebaseAnalytics (= 7.6.0)
|
||||
- Firebase/CoreOnly (7.6.0):
|
||||
- FirebaseCore (= 7.6.0)
|
||||
- Firebase/Crashlytics (7.6.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseCrashlytics (~> 4.6.2)
|
||||
- Firebase/Messaging (6.34.0):
|
||||
- FirebaseCrashlytics (~> 7.6.0)
|
||||
- Firebase/Messaging (7.6.0):
|
||||
- Firebase/CoreOnly
|
||||
- FirebaseMessaging (~> 4.7.1)
|
||||
- FirebaseAnalytics (6.9.0):
|
||||
- FirebaseCore (~> 6.10)
|
||||
- FirebaseInstallations (~> 1.7)
|
||||
- GoogleAppMeasurement (= 6.9.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.7)
|
||||
- GoogleUtilities/MethodSwizzler (~> 6.7)
|
||||
- GoogleUtilities/Network (~> 6.7)
|
||||
- "GoogleUtilities/NSData+zlib (~> 6.7)"
|
||||
- nanopb (~> 1.30906.0)
|
||||
- FirebaseCore (6.10.4):
|
||||
- FirebaseCoreDiagnostics (~> 1.6)
|
||||
- GoogleUtilities/Environment (~> 6.7)
|
||||
- GoogleUtilities/Logger (~> 6.7)
|
||||
- FirebaseCoreDiagnostics (1.7.0):
|
||||
- GoogleDataTransport (~> 7.4)
|
||||
- GoogleUtilities/Environment (~> 6.7)
|
||||
- GoogleUtilities/Logger (~> 6.7)
|
||||
- nanopb (~> 1.30906.0)
|
||||
- FirebaseCrashlytics (4.6.2):
|
||||
- FirebaseCore (~> 6.10)
|
||||
- FirebaseInstallations (~> 1.6)
|
||||
- GoogleDataTransport (~> 7.2)
|
||||
- nanopb (~> 1.30906.0)
|
||||
- FirebaseMessaging (~> 7.6.0)
|
||||
- FirebaseAnalytics (7.6.0):
|
||||
- FirebaseCore (~> 7.0)
|
||||
- FirebaseInstallations (~> 7.0)
|
||||
- GoogleAppMeasurement (= 7.6.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.0)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.0)
|
||||
- GoogleUtilities/Network (~> 7.0)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.0)"
|
||||
- nanopb (~> 2.30907.0)
|
||||
- FirebaseCore (7.6.0):
|
||||
- FirebaseCoreDiagnostics (~> 7.4)
|
||||
- GoogleUtilities/Environment (~> 7.0)
|
||||
- GoogleUtilities/Logger (~> 7.0)
|
||||
- FirebaseCoreDiagnostics (7.6.0):
|
||||
- GoogleDataTransport (~> 8.0)
|
||||
- GoogleUtilities/Environment (~> 7.0)
|
||||
- GoogleUtilities/Logger (~> 7.0)
|
||||
- nanopb (~> 2.30907.0)
|
||||
- FirebaseCrashlytics (7.6.0):
|
||||
- FirebaseCore (~> 7.0)
|
||||
- FirebaseInstallations (~> 7.0)
|
||||
- GoogleDataTransport (~> 8.0)
|
||||
- nanopb (~> 2.30907.0)
|
||||
- PromisesObjC (~> 1.2)
|
||||
- FirebaseInstallations (1.7.0):
|
||||
- FirebaseCore (~> 6.10)
|
||||
- GoogleUtilities/Environment (~> 6.7)
|
||||
- GoogleUtilities/UserDefaults (~> 6.7)
|
||||
- FirebaseInstallations (7.6.0):
|
||||
- FirebaseCore (~> 7.0)
|
||||
- GoogleUtilities/Environment (~> 7.0)
|
||||
- GoogleUtilities/UserDefaults (~> 7.0)
|
||||
- PromisesObjC (~> 1.2)
|
||||
- FirebaseInstanceID (4.8.0):
|
||||
- FirebaseCore (~> 6.10)
|
||||
- FirebaseInstallations (~> 1.6)
|
||||
- GoogleUtilities/Environment (~> 6.7)
|
||||
- GoogleUtilities/UserDefaults (~> 6.7)
|
||||
- FirebaseMessaging (4.7.1):
|
||||
- FirebaseCore (~> 6.10)
|
||||
- FirebaseInstanceID (~> 4.7)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.7)
|
||||
- GoogleUtilities/Environment (~> 6.7)
|
||||
- GoogleUtilities/Reachability (~> 6.7)
|
||||
- GoogleUtilities/UserDefaults (~> 6.7)
|
||||
- Protobuf (>= 3.9.2, ~> 3.9)
|
||||
- Google-Mobile-Ads-SDK (7.66.0):
|
||||
- GoogleAppMeasurement (~> 6.0)
|
||||
- FirebaseInstanceID (7.6.0):
|
||||
- FirebaseCore (~> 7.0)
|
||||
- FirebaseInstallations (~> 7.0)
|
||||
- GoogleUtilities/Environment (~> 7.0)
|
||||
- GoogleUtilities/UserDefaults (~> 7.0)
|
||||
- FirebaseMessaging (7.6.0):
|
||||
- FirebaseCore (~> 7.0)
|
||||
- FirebaseInstanceID (~> 7.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.0)
|
||||
- GoogleUtilities/Environment (~> 7.0)
|
||||
- GoogleUtilities/Reachability (~> 7.0)
|
||||
- GoogleUtilities/UserDefaults (~> 7.0)
|
||||
- Google-Mobile-Ads-SDK (8.1.0):
|
||||
- GoogleAppMeasurement (~> 7.0)
|
||||
- GoogleUserMessagingPlatform (~> 1.1)
|
||||
- GoogleAppMeasurement (6.9.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 6.7)
|
||||
- GoogleUtilities/MethodSwizzler (~> 6.7)
|
||||
- GoogleUtilities/Network (~> 6.7)
|
||||
- "GoogleUtilities/NSData+zlib (~> 6.7)"
|
||||
- nanopb (~> 1.30906.0)
|
||||
- GoogleDataTransport (7.5.1):
|
||||
- nanopb (~> 1.30906.0)
|
||||
- GoogleMaps (4.0.0):
|
||||
- GoogleMaps/Maps (= 4.0.0)
|
||||
- GoogleMaps/Base (4.0.0)
|
||||
- GoogleMaps/Maps (4.0.0):
|
||||
- GoogleMaps/Base
|
||||
- GooglePlaces (4.0.0):
|
||||
- GoogleMaps/Base (= 4.0.0)
|
||||
- GoogleUserMessagingPlatform (1.2.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (6.7.2):
|
||||
- GoogleAppMeasurement (7.6.0):
|
||||
- GoogleUtilities/AppDelegateSwizzler (~> 7.0)
|
||||
- GoogleUtilities/MethodSwizzler (~> 7.0)
|
||||
- GoogleUtilities/Network (~> 7.0)
|
||||
- "GoogleUtilities/NSData+zlib (~> 7.0)"
|
||||
- nanopb (~> 2.30907.0)
|
||||
- GoogleDataTransport (8.2.0):
|
||||
- nanopb (~> 2.30907.0)
|
||||
- GoogleUserMessagingPlatform (1.4.0)
|
||||
- GoogleUtilities/AppDelegateSwizzler (7.2.2):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network
|
||||
- GoogleUtilities/Environment (6.7.2):
|
||||
- GoogleUtilities/Environment (7.2.2):
|
||||
- PromisesObjC (~> 1.2)
|
||||
- GoogleUtilities/Logger (6.7.2):
|
||||
- GoogleUtilities/Logger (7.2.2):
|
||||
- GoogleUtilities/Environment
|
||||
- GoogleUtilities/MethodSwizzler (6.7.2):
|
||||
- GoogleUtilities/MethodSwizzler (7.2.2):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/Network (6.7.2):
|
||||
- GoogleUtilities/Network (7.2.2):
|
||||
- GoogleUtilities/Logger
|
||||
- "GoogleUtilities/NSData+zlib"
|
||||
- GoogleUtilities/Reachability
|
||||
- "GoogleUtilities/NSData+zlib (6.7.2)"
|
||||
- GoogleUtilities/Reachability (6.7.2):
|
||||
- "GoogleUtilities/NSData+zlib (7.2.2)"
|
||||
- GoogleUtilities/Reachability (7.2.2):
|
||||
- GoogleUtilities/Logger
|
||||
- GoogleUtilities/UserDefaults (6.7.2):
|
||||
- GoogleUtilities/UserDefaults (7.2.2):
|
||||
- GoogleUtilities/Logger
|
||||
- nanopb (1.30906.0):
|
||||
- nanopb/decode (= 1.30906.0)
|
||||
- nanopb/encode (= 1.30906.0)
|
||||
- nanopb/decode (1.30906.0)
|
||||
- nanopb/encode (1.30906.0)
|
||||
- PromisesObjC (1.2.11)
|
||||
- Protobuf (3.13.0)
|
||||
- nanopb (2.30907.0):
|
||||
- nanopb/decode (= 2.30907.0)
|
||||
- nanopb/encode (= 2.30907.0)
|
||||
- nanopb/decode (2.30907.0)
|
||||
- nanopb/encode (2.30907.0)
|
||||
- PromisesObjC (1.2.12)
|
||||
- Solar (2.1.0)
|
||||
|
||||
DEPENDENCIES:
|
||||
@@ -106,8 +97,6 @@ DEPENDENCIES:
|
||||
- Firebase/Crashlytics
|
||||
- Firebase/Messaging
|
||||
- Google-Mobile-Ads-SDK
|
||||
- GoogleMaps
|
||||
- GooglePlaces
|
||||
- Solar
|
||||
|
||||
SPEC REPOS:
|
||||
@@ -124,37 +113,31 @@ SPEC REPOS:
|
||||
- Google-Mobile-Ads-SDK
|
||||
- GoogleAppMeasurement
|
||||
- GoogleDataTransport
|
||||
- GoogleMaps
|
||||
- GooglePlaces
|
||||
- GoogleUserMessagingPlatform
|
||||
- GoogleUtilities
|
||||
- nanopb
|
||||
- PromisesObjC
|
||||
- Protobuf
|
||||
- Solar
|
||||
|
||||
SPEC CHECKSUMS:
|
||||
DZNEmptyDataSet: 9525833b9e68ac21c30253e1d3d7076cc828eaa7
|
||||
Firebase: c23a36d9e4cdf7877dfcba8dd0c58add66358999
|
||||
FirebaseAnalytics: 3bb096873ee0d7fa4b6c70f5e9166b6da413cc7f
|
||||
FirebaseCore: d3a978a3cfa3240bf7e4ba7d137fdf5b22b628ec
|
||||
FirebaseCoreDiagnostics: 770ac5958e1372ce67959ae4b4f31d8e127c3ac1
|
||||
FirebaseCrashlytics: 1a747c9cc084a24dc6d9511c991db1cd078154eb
|
||||
FirebaseInstallations: 466c7b4d1f58fe16707693091da253726a731ed2
|
||||
FirebaseInstanceID: bd3ffc24367f901a43c063b36c640b345a4a5dd1
|
||||
FirebaseMessaging: 5eca4ef173de76253352511aafef774caa1cba2a
|
||||
Google-Mobile-Ads-SDK: 7d7074359c040f5add4e0963bf860e14690060d0
|
||||
GoogleAppMeasurement: a6a3a066369828db64eda428cb2856dc1cdc7c4e
|
||||
GoogleDataTransport: f56af7caa4ed338dc8e138a5d7c5973e66440833
|
||||
GoogleMaps: b7f7fc569a9b354a3af0d9729dbec40957b7d41e
|
||||
GooglePlaces: ca8d4aba09ba79e0a829cf1dca03a41de6a09016
|
||||
GoogleUserMessagingPlatform: c85530d930ba509583aa5a6d50a10aca22cf8502
|
||||
GoogleUtilities: 7f2f5a07f888cdb145101d6042bc4422f57e70b3
|
||||
nanopb: 59317e09cf1f1a0af72f12af412d54edf52603fc
|
||||
PromisesObjC: 8c196f5a328c2cba3e74624585467a557dcb482f
|
||||
Protobuf: 3dac39b34a08151c6d949560efe3f86134a3f748
|
||||
Firebase: e1e089d9aac215a52442583f818ab61de3c4581b
|
||||
FirebaseAnalytics: 9f8f4feab1f3fddf4e4515f8f022fe6aa9e51043
|
||||
FirebaseCore: 0a43b7f1c5b36f3358cd703011ca4c7e0df55870
|
||||
FirebaseCoreDiagnostics: ee1184d51da3293335b83355aad20f537acc24cf
|
||||
FirebaseCrashlytics: 1e87b25303b1840b3c99c37ee427c3e9564a4be1
|
||||
FirebaseInstallations: 6e4e77396559bc2ae0504823837ed737b1c7e47f
|
||||
FirebaseInstanceID: cf243611700eddc916b093353adbd4da822cfa63
|
||||
FirebaseMessaging: 4b9b2850fcfcaac2820097ee3703ba6cfff3df84
|
||||
Google-Mobile-Ads-SDK: efb7fb74595668fbbe680f0d1c06f9a8ff694c7c
|
||||
GoogleAppMeasurement: c542a2feaac9ab98fd074e8f1a02c3585bbfbd47
|
||||
GoogleDataTransport: 1024b1a4dfbd7a0e92cb20d7e0a6f1fb66b449a4
|
||||
GoogleUserMessagingPlatform: b168e8c46cd8f92aa3e34b584c4ca78a411ce367
|
||||
GoogleUtilities: 31c5b01f978a70c6cff2afc6272b3f1921614b43
|
||||
nanopb: 59221d7f958fb711001e6a449489542d92ae113e
|
||||
PromisesObjC: 3113f7f76903778cf4a0586bd1ab89329a0b7b97
|
||||
Solar: 2dc6e7cc39186cb0c8228fa08df76fb50c7d8f24
|
||||
|
||||
PODFILE CHECKSUM: e0786ee9478a544f2210d53b698dd2757fa7dbe8
|
||||
PODFILE CHECKSUM: dd5131b6d7a83fb7c22ecc161ed4fc143eda0ac1
|
||||
|
||||
COCOAPODS: 1.9.3
|
||||
COCOAPODS: 1.10.1
|
||||
|
||||
Reference in New Issue
Block a user