From 7ccc1484ab74ebf5797820bdd24edccfd42aaa50 Mon Sep 17 00:00:00 2001 From: "Jay Freeman (saurik)" Date: Wed, 15 Feb 2017 10:29:44 -0800 Subject: Move some of our clearly shared code into CyteKit. --- CyteKit/Application.h | 33 +++++++++++++++++++ CyteKit/Application.mm | 60 ++++++++++++++++++++++++++++++++++ CyteKit/NavigationController.h | 34 ++++++++++++++++++++ CyteKit/NavigationController.mm | 71 +++++++++++++++++++++++++++++++++++++++++ CyteKit/TabBarController.h | 1 + CyteKit/TabBarController.mm | 13 ++++++++ CyteKit/ViewController.h | 17 +++++----- CyteKit/ViewController.mm | 8 ++--- 8 files changed, 224 insertions(+), 13 deletions(-) create mode 100644 CyteKit/Application.h create mode 100644 CyteKit/Application.mm create mode 100644 CyteKit/NavigationController.h create mode 100644 CyteKit/NavigationController.mm (limited to 'CyteKit') diff --git a/CyteKit/Application.h b/CyteKit/Application.h new file mode 100644 index 0000000..d95ad1c --- /dev/null +++ b/CyteKit/Application.h @@ -0,0 +1,33 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2015 Jay Freeman (saurik) +*/ + +/* GNU General Public License, Version 3 {{{ */ +/* + * Cydia is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Cydia is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cydia. If not, see . +**/ +/* }}} */ + +#ifndef CyteKit_Application_H +#define CyteKit_Application_H + +#include + +@interface CyteApplication : UIApplication + +- (void) applicationDidFinishLaunching:(id)unused; + +@end + +#endif//CyteKit_Application_H diff --git a/CyteKit/Application.mm b/CyteKit/Application.mm new file mode 100644 index 0000000..d1d6142 --- /dev/null +++ b/CyteKit/Application.mm @@ -0,0 +1,60 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2015 Jay Freeman (saurik) +*/ + +/* GNU General Public License, Version 3 {{{ */ +/* + * Cydia is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Cydia is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cydia. If not, see . +**/ +/* }}} */ + +#include "CyteKit/UCPlatform.h" + +#include +#include + +#include "iPhonePrivate.h" +#include + +@implementation CyteApplication : UIApplication { +} + +- (void) _sendMemoryWarningNotification { + if (kCFCoreFoundationVersionNumber < kCFCoreFoundationVersionNumber_iPhoneOS_3_0) // XXX: maybe 4_0? + [[NSNotificationCenter defaultCenter] postNotificationName:@"UIApplicationMemoryWarningNotification" object:[UIApplication sharedApplication]]; + else + [[NSNotificationCenter defaultCenter] postNotificationName:@"UIApplicationDidReceiveMemoryWarningNotification" object:[UIApplication sharedApplication]]; +} + +- (void) _sendMemoryWarningNotifications { + while (true) { + [self performSelectorOnMainThread:@selector(_sendMemoryWarningNotification) withObject:nil waitUntilDone:NO]; + sleep(2); + //usleep(2000000); + } +} + +- (void) applicationDidReceiveMemoryWarning:(UIApplication *)application { + NSLog(@"--"); + [[NSURLCache sharedURLCache] removeAllCachedResponses]; +} + +- (void) applicationDidFinishLaunching:(id)unused { + //[NSThread detachNewThreadSelector:@selector(_sendMemoryWarningNotifications) toTarget:self withObject:nil]; + + if ([self respondsToSelector:@selector(setApplicationSupportsShakeToEdit:)]) + [self setApplicationSupportsShakeToEdit:NO]; +} + +@end diff --git a/CyteKit/NavigationController.h b/CyteKit/NavigationController.h new file mode 100644 index 0000000..b295858 --- /dev/null +++ b/CyteKit/NavigationController.h @@ -0,0 +1,34 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2015 Jay Freeman (saurik) +*/ + +/* GNU General Public License, Version 3 {{{ */ +/* + * Cydia is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Cydia is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cydia. If not, see . +**/ +/* }}} */ + +#ifndef CyteKit_NavigationController_H +#define CyteKit_NavigationController_H + +#include + +@interface UINavigationController (Cydia) + +- (NSArray *) navigationURLCollection; +- (void) unloadData; + +@end + +#endif//CyteKit_NavigationController_H diff --git a/CyteKit/NavigationController.mm b/CyteKit/NavigationController.mm new file mode 100644 index 0000000..f53ad85 --- /dev/null +++ b/CyteKit/NavigationController.mm @@ -0,0 +1,71 @@ +/* Cydia - iPhone UIKit Front-End for Debian APT + * Copyright (C) 2008-2015 Jay Freeman (saurik) +*/ + +/* GNU General Public License, Version 3 {{{ */ +/* + * Cydia is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published + * by the Free Software Foundation, either version 3 of the License, + * or (at your option) any later version. + * + * Cydia is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Cydia. If not, see . +**/ +/* }}} */ + +#include "CyteKit/UCPlatform.h" + +#include +#include + +#include "CyteKit/NavigationController.h" +#include "CyteKit/ViewController.h" + +#include "iPhonePrivate.h" +#include + +@implementation UINavigationController (Cydia) + +- (NSArray *) navigationURLCollection { + NSMutableArray *stack([NSMutableArray array]); + + for (CyteViewController *controller in [self viewControllers]) { + NSString *url = [[controller navigationURL] absoluteString]; + if (url != nil) + [stack addObject:url]; + } + + return stack; +} + +- (void) reloadData { + [super reloadData]; + + UIViewController *visible([self visibleViewController]); + if (visible != nil) + [visible reloadData]; + + // on the iPad, this view controller is ALSO visible. :( + extern bool IsWildcat_; + if (IsWildcat_) + if (UIViewController *modal = [self modalViewController]) + if ([modal modalPresentationStyle] == UIModalPresentationFormSheet) + if (UIViewController *top = [self topViewController]) + if (top != visible) + [top reloadData]; +} + +- (void) unloadData { + for (CyteViewController *page in [self viewControllers]) + [page unloadData]; + + [super unloadData]; +} + +@end diff --git a/CyteKit/TabBarController.h b/CyteKit/TabBarController.h index 7aee767..2aa403c 100644 --- a/CyteKit/TabBarController.h +++ b/CyteKit/TabBarController.h @@ -31,6 +31,7 @@ @interface CyteTabBarController : UITabBarController +- (NSArray *) navigationURLCollection; - (UIViewController *) unselectedViewController; - (void) setUnselectedViewController:(UIViewController *)transient; diff --git a/CyteKit/TabBarController.mm b/CyteKit/TabBarController.mm index 7a4ead3..35a2bd0 100644 --- a/CyteKit/TabBarController.mm +++ b/CyteKit/TabBarController.mm @@ -35,6 +35,19 @@ _H remembered_; } +- (NSArray *) navigationURLCollection { + NSMutableArray *items([NSMutableArray array]); + + // XXX: Should this deal with transient view controllers? + for (id navigation in [self viewControllers]) { + NSArray *stack = [navigation performSelector:@selector(navigationURLCollection)]; + if (stack != nil) + [items addObject:stack]; + } + + return items; +} + - (void) didReceiveMemoryWarning { [super didReceiveMemoryWarning]; diff --git a/CyteKit/ViewController.h b/CyteKit/ViewController.h index 3b637f0..156f3cb 100644 --- a/CyteKit/ViewController.h +++ b/CyteKit/ViewController.h @@ -25,13 +25,9 @@ #include @interface UIViewController (Cydia) -- (BOOL) hasLoaded; -- (void) reloadData; -- (void) unloadData; -- (UIViewController *) parentOrPresentingViewController; -@end -@interface CyteViewController : UIViewController +// Override this in subclasses if you manage the "has seen first load" state yourself. +- (BOOL) hasLoaded; // The default implementation of this method is essentially a no-op, // but calling the superclass implementation is *required*. @@ -39,18 +35,21 @@ - (void) unloadData; +- (UIViewController *) parentOrPresentingViewController; + // This URL is used to save the state of the view controller. Return // nil if you cannot or should not save the URL for this page. - (NSURL *) navigationURL; +@end + +@interface CyteViewController : UIViewController + // By default, this delegate is unused. However, it's provided here in case // you need some kind of delegate in a subclass. - (void) setDelegate:(id)delegate; - (id) delegate; -// Override this in subclasses if you manage the "has seen first load" state yourself. -- (BOOL) hasLoaded; - // This is called when the view managed by the view controller is released. // That is not always when the controller itself is released: it also can // happen when more memory is needed by the system or whenever the controller diff --git a/CyteKit/ViewController.mm b/CyteKit/ViewController.mm index 52c925d..28c7c43 100644 --- a/CyteKit/ViewController.mm +++ b/CyteKit/ViewController.mm @@ -52,6 +52,10 @@ return nil; } +- (NSURL *) navigationURL { + return nil; +} + @end @implementation CyteViewController { @@ -109,10 +113,6 @@ [super unloadData]; } -- (NSURL *) navigationURL { - return nil; -} - - (void) setPageColor:(UIColor *)color { if (color == nil) color = [UIColor groupTableViewBackgroundColor]; -- cgit v1.2.3