-
Notifications
You must be signed in to change notification settings - Fork 1
/
ViewController.m
317 lines (252 loc) · 13.1 KB
/
ViewController.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
//
// ViewController.m
// ADAM by Noscio
//
// Created by Jonathan Lucas Fritz on 12.08.16.
// Copyright © 2016 NOSCIO. All rights reserved.
//
#import "ViewController.h"
#import "ADAMCom.h"
#import "ADAMerci.h"
#import "ADAM_MapView.h"
#import "MBProgressHUD.h"
#import "CheckConnection.h"
#import "outrepasser.h"
@interface ViewController ()<CLLocationManagerDelegate>
@end
ADAM_MapView *mapView;
NSMutableDictionary *dictim;
NSMutableArray *nummerext;
NSMutableArray *stationlong;
NSMutableDictionary *nummerbahn;
ADAMerci *baguette;
MBProgressHUD *hud;
@implementation ViewController
@synthesize datenschutz;
@synthesize credits;
@synthesize ortung;
- (void)viewDidLoad {
[super viewDidLoad];
[self startupcheck]; //Überprüfe die Verbindung
}
///Verbindung überprüfen und dann starten oder Fehlermeldeung ausgeben
-(void)startupcheck
{
CheckConnection *checker;
checker = [[CheckConnection alloc]init];
if ([checker checkfnc]) //Wenn eine Verbindung vorhanden ist
{
[self runner];
}
if (![checker checkfnc]) //Wenn keine Verbindung vorhanden ist
{
NSTimer *timernew; // Kurzes Delay, dass sich das UI updaten kann
timernew = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(run_error) userInfo:nil repeats:NO];
}
}
-(void)runner
{
locationManager = [[CLLocationManager alloc] init]; // Mache dieses blöde Location Manager Zeugs
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
[locationManager startUpdatingLocation]; //Starte Location Updates
credits = [[UIButton alloc]initWithFrame:CGRectMake(0, 10, self.view.frame.size.width, 10)]; // Credits Button erstellen
[credits setBackgroundColor:[UIColor clearColor]];
[credits.titleLabel setFont:[UIFont systemFontOfSize:self.view.frame.size.height/55]];
[credits setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[credits setTitle:(@"Daten bereitgestellt von der Deutschen Bahn / ADAM\nFreepik | Creative Commons BY 3.0 | CC 3.0 BY") forState:UIControlStateNormal]; // Text für Credits setzen
credits.titleLabel.numberOfLines = 2; // Das Ding hat 2 Linien
hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; //HUD aktivieren und Objekt abgreifen für Modifikationen
hud.mode = MBProgressHUDModeIndeterminate;
hud.detailsLabel.text = (@"Lade Daten vom Server..."); //Schönen Text beim HUD setzen
NSTimer *timernew; // Kurzes Delay, dass sich das UI updaten kann
timernew = [NSTimer scheduledTimerWithTimeInterval:0.3 target:self selector:@selector(run_debut) userInfo:nil repeats:NO];
NSTimer *timernewnew; // Kurzes Delay, dass sich das UI updaten kann
timernewnew = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(testanother) userInfo:nil repeats:NO];
// http://www.bahnhof.de/bahnhof-de/Lorch__Wuertt_.html?hl=lorch // Ignorieren
[credits addTarget:self action:@selector(showcreditalert) forControlEvents:UIControlEventPrimaryActionTriggered]; // Die Action für den Credits Button setzen
credits.titleLabel.textAlignment = NSTextAlignmentCenter; //Text Aligment setzen
// credits.titleLabel.font = [UIFont boldSystemFontOfSize:credits.titleLabel.font.pointSize];
}
///Die Methode hat nen blöden Namen weil ich was testen wollte, hab aber keine Lust das zu ändern - funktioniert jetzt ja
-(void)testanother
{
// NSString *urlstring;
// urlstring = (@"https://noscio.eu/ADAM/stationsdaten.json"); //Hier liegen die Aufzugsdaten
//
// NSURL *url=[NSURL URLWithString:urlstring];
//
// NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
// [request setURL:url];
// [request setHTTPMethod:@"GET"];
//
// NSError *error;
// NSURLResponse *response;
// NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
//
//
NSURL *imgPath = [[NSBundle mainBundle] URLForResource:@"stationsdaten" withExtension:@"json"];
NSString*stringPath = [imgPath absoluteString]; //this is correct
//you can again use it in NSURL eg if you have async loading images and your mechanism
//uses only url like mine (but sometimes i need local files to load)
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringPath]];
dictim = [self dicfromdata:data]; //Aufzugsdaten in Dictionary schieben
fullele = [dictim mutableCopy];
nummerext = [dictim valueForKeyPath:@"Equipment"]; //Alle Equip abgreifen
stationlong = [dictim valueForKeyPath:@"Ort"]; // Alle Orte abgreifen
nummerbahn = [NSMutableDictionary new];
int dreii = 0;
for (NSString *key in nummerext) {
NSString *realkey;
realkey = [NSString stringWithFormat:@"%lld", key.longLongValue];
[nummerbahn setValue:[stationlong objectAtIndex:dreii] forKey:realkey]; // Jetzt ein Dictionary erstellen, wo ich anhand der Equipmentnummer den Ort rauskrieg
dreii++;
}
// NSLog(@"%@", nummerbahn);
nummerbahnnow = [nummerbahn mutableCopy]; // Und das ganze global schalten. Finito!
}
-(NSMutableDictionary*)dicfromdata:(NSData*)responseData
{
NSError* error;
NSMutableDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
// NSLog(@"%@",json.description);
return json;
}
///Fehler wegen Internet anzeigen
-(void)run_error
{
UIAlertController *control;
control = [UIAlertController alertControllerWithTitle:(@"Keine Verbindung") message:(@"Die Daten können nicht abgerufen werden. Es besteht keine aktive Verbindung zum Internet") preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* ok = [UIAlertAction
actionWithTitle:@"Erneut versuchen"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action)
{
[self startupcheck]; // Nochmal StartupCheck durchlaufen lassen
}];
[control addAction:ok];
[self presentViewController:control animated:YES completion:nil];
}
///Hier liegt das Herz der ganze Sache, wenn das nicht ausgeführt wird geht gar nichts
-(void)run_debut
{
_loadingindicator = [[UIActivityIndicatorView alloc]initWithFrame:self.view.frame]; //Ladeding initializieren
[self activateloader];
ADAMCom *com;
com = [[ADAMCom alloc]init]; // ADAMCom vorbereiten
baguette = [[ADAMerci alloc]init]; //Und das ADAMerci vorbereiten
baguette = [com dictionary_fromADAM];
mapView = [[ADAM_MapView alloc]initWithFrame:self.view.frame]; // Jetzt kommt die ADAM_MapView!
[self.view addSubview:mapView];
mapView.viewc = (id)self;
mapView.fromage = baguette; // Brot mit Käse
[self.view addSubview:mapView];
[mapView setup]; // aufsetzen
[self.view addSubview:credits];
// Hier kommt jetzt erstmal UI Gedöns
datenschutz = [[UIButton alloc]initWithFrame:CGRectMake(self.view.frame.size.width-self.view.frame.size.width/5, self.view.frame.size.height-15,self.view.frame.size.width/5, 10)];
datenschutz.titleLabel.textAlignment = NSTextAlignmentRight;
[datenschutz setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
[datenschutz addTarget:self action:@selector(showprivacy) forControlEvents:UIControlEventPrimaryActionTriggered];
[datenschutz setTitle:(@"Datenschutz") forState:UIControlStateNormal];
[datenschutz.titleLabel setFont:[UIFont systemFontOfSize:self.view.frame.size.height/56]];
[datenschutz setBackgroundColor:[UIColor whiteColor]];
// [self.view addSubview:datenschutz];
//Datenschutzvereinbarung anzeigen wenn noch nicht geschehen
if (![[NSUserDefaults standardUserDefaults]boolForKey:(@"privacy2")])
{
[self showprivacy];
[[NSUserDefaults standardUserDefaults]setBool:YES forKey:(@"privacy2")];
}
// ortung = [[UIButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width-self.view.frame.size.width/10, self.view.frame.size.height-(35+self.view.frame.size.width/15),self.view.frame.size.width/10, self.view.frame.size.width/10)];
ortung = [[UIButton alloc] initWithFrame:CGRectMake(self.view.frame.size.width-50, self.view.frame.size.height-50,50, 50)];
[ortung setImage:[UIImage imageNamed:(@"smalladam.png")] forState:UIControlStateNormal];
[self.view addSubview:ortung];
ortung.imageView.contentMode = UIViewContentModeScaleAspectFit;
[ortung addTarget:self action:@selector(ortme) forControlEvents:UIControlEventPrimaryActionTriggered];
// Das wars!
printf("\n UI Bereit");
}
///Creditauswahl
-(void)showcreditalert
{
UIAlertController *controller;
controller = [UIAlertController alertControllerWithTitle:(@"Credits") message:(@"Danke an alle.") preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction* db = [UIAlertAction actionWithTitle:(@"Deutsche Bahn (DB)") style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:(@"http://data.deutschebahn.com")]];
}];
UIAlertAction* freep = [UIAlertAction actionWithTitle:(@"Freepik | Flaticon") style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:(@"http://www.freepik.com")]];
}];
UIAlertAction* noscio = [UIAlertAction actionWithTitle:(@"Entwickelt von Jonathan Fritz") style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
[[UIApplication sharedApplication]openURL:[NSURL URLWithString:(@"https://noscio.eu")]];
}];
UIAlertAction* close = [UIAlertAction actionWithTitle:(@"Schließen") style:UIAlertActionStyleDefault
handler:^(UIAlertAction * action) {
}];
[controller addAction:db];
[controller addAction:freep];
[controller addAction:noscio];
[controller addAction:close];
[self presentViewController:controller animated:YES completion:nil];
}
///Userlocation zentrieren
-(void)ortme
{
MKCoordinateRegion region;
MKCoordinateSpan span;
span.latitudeDelta = 0.05;
span.longitudeDelta = 0.05;
CLLocationCoordinate2D location;
location.latitude = mapView.map.userLocation.coordinate.latitude;
location.longitude = mapView.map.userLocation.coordinate.longitude;
region.span = span;
region.center = location;
[mapView.map setRegion:region animated:YES];
}
///Datenschutzcontroller anzeigen
-(void)showprivacy
{
UIAlertController *priv;
priv = [UIAlertController alertControllerWithTitle:(@"Datenschutz") message:(@"Deine Privatsphäre ist uns sehr wichtig. Deshalb stellt die App zu keinem Zeitpunkt eine Verbindung mit den Servern von Noscio her. Die Deutsche Bahn erhält möglicherweise bei dem Abrufen der Daten von ADAM Informationen darüber, welches Gerät du verwendest und wann du auf ADAM zugreifst. Dein Standort wird aber nicht übermittelt. Mit der Nutzung der App erklärst du dich mit diesen Bedingungen einverstanden.") preferredStyle:UIAlertControllerStyleAlert];
UIAlertAction *okay;
okay = [UIAlertAction actionWithTitle:(@"In Ordnung") style:UIAlertActionStyleDefault handler:nil];
[priv addAction:okay];
[self presentViewController:priv animated:YES completion:nil];
}
///Das muss man unbedingt ausschalten, das sieht sonst so unfassbar scheiße aus
-(BOOL)prefersStatusBarHidden
{
return YES;
}
//-(MKAnnotationView*) returnPointView: (CLLocationCoordinate2D) location andTitle: (NSString*) title andColor: (int) color{
// /*Method that acts as a point-generating machine. Takes the parameters of the location, the title, and the color of the
// pin, and it returns a view that holds the pin with those specified details*/
//
// printf("\n Working");
//
//
// MKPointAnnotation *resultPin = [[MKPointAnnotation alloc] init];
// MKPinAnnotationView *result = [[MKPinAnnotationView alloc] initWithAnnotation:resultPin reuseIdentifier:Nil];
// [resultPin setCoordinate:location];
// resultPin.title = title;
// result.pinTintColor = [UIColor greenColor];
//
// return result;
//
//}
// 2 unnütze Methoden
-(void)activateloader
{
}
-(void)deactivateloader
{
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
printf("\n Memory Warning erhalten. Dein Gerät ist scheiße"); //Nutzer beleidigen weil ich nicht effizient (genug) programmiert habe
}
@end