]> git.saurik.com Git - cydia.git/commitdiff
Older iOS did not have SBSCopyIconImagePNGData*().
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Jul 2015 08:55:37 +0000 (01:55 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 12 Jul 2015 08:55:37 +0000 (01:55 -0700)
MobileCydia.mm
iPhonePrivate.h

index b039213a2ac5ca96c511edea8ba2b15f283c45a1..67529fe86317ae81501e85a2fe48260db4c30cef 100644 (file)
@@ -248,6 +248,7 @@ static NSString *Cache_;
     [NSString stringWithFormat:@"%@/%s", Cache_, file]
 
 static void (*$SBSSetInterceptsMenuButtonForever)(bool);
+static NSData *(*$SBSCopyIconImagePNGDataForDisplayIdentifier)(NSString *);
 
 static CFStringRef (*$MGCopyAnswer)(CFStringRef);
 
@@ -7182,12 +7183,21 @@ static void HomeControllerReachabilityCallback(SCNetworkReachabilityRef reachabi
         if (path == nil)
             goto fail;
         path = [path stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
-        NSData *data([SBSCopyIconImagePNGDataForDisplayIdentifier(path) autorelease]);
-        UIImage *icon;
-        if (data == nil)
-            icon = [UIImage imageNamed:@"unknown.png"];
-        else
+
+        UIImage *icon(nil);
+
+        if (icon == nil && $SBSCopyIconImagePNGDataForDisplayIdentifier != NULL) {
+            NSData *data([$SBSCopyIconImagePNGDataForDisplayIdentifier(path) autorelease]);
             icon = [UIImage imageWithData:data];
+        }
+
+        if (icon == nil)
+            if (NSString *file = SBSCopyIconImagePathForDisplayIdentifier(path))
+                icon = [UIImage imageAtPath:file];
+
+        if (icon == nil)
+            icon = [UIImage imageNamed:@"unknown.png"];
+
         [self _returnPNGWithImage:icon forRequest:request];
     } else if ([command isEqualToString:@"package-icon"]) {
         if (path == nil)
@@ -10502,6 +10512,7 @@ int main(int argc, char *argv[]) {
     /* }}} */
 
     $SBSSetInterceptsMenuButtonForever = reinterpret_cast<void (*)(bool)>(dlsym(RTLD_DEFAULT, "SBSSetInterceptsMenuButtonForever"));
+    $SBSCopyIconImagePNGDataForDisplayIdentifier = reinterpret_cast<NSData *(*)(NSString *)>(dlsym(RTLD_DEFAULT, "SBSCopyIconImagePNGDataForDisplayIdentifier"));
 
     const char *symbol(kCFCoreFoundationVersionNumber >= 800 ? "MGGetBoolAnswer" : "GSSystemHasCapability");
     BOOL (*GSSystemHasCapability)(CFStringRef) = reinterpret_cast<BOOL (*)(CFStringRef)>(dlsym(RTLD_DEFAULT, symbol));
index 70eef38194607750fe1a83573b2e0eb1d7016793..95e9c002b3aab27ec32d22b1dfb61e046fd6ba32 100644 (file)
@@ -440,7 +440,7 @@ extern "C" mach_port_t SBSSpringBoardServerPort();
 extern "C" int SBBundlePathForDisplayIdentifier(mach_port_t port, const char *identifier, char *path);
 extern "C" NSSet *SBSCopyDisplayIdentifiers();
 extern "C" NSString *SBSCopyLocalizedApplicationNameForDisplayIdentifier(NSString *);
-extern "C" NSData *SBSCopyIconImagePNGDataForDisplayIdentifier(NSString *);
+extern "C" NSString *SBSCopyIconImagePathForDisplayIdentifier(NSString *);
 extern "C" UIImage *_UIImageWithName(NSString *name);
 extern "C" void UISetColor(CGColorRef color);
 // }}}