From ca1fdd49d611312915428496e2ae5c878d1be7cf Mon Sep 17 00:00:00 2001 From: arichornlover <78001398+arichornlover@users.noreply.github.com> Date: Tue, 30 Apr 2024 00:17:59 -0500 Subject: [PATCH] Better AppIconOptionsController UI --- Source/AppIconOptionsController.m | 110 +++++++++++++++++------------- 1 file changed, 61 insertions(+), 49 deletions(-) diff --git a/Source/AppIconOptionsController.m b/Source/AppIconOptionsController.m index 61b2edb..44f1524 100644 --- a/Source/AppIconOptionsController.m +++ b/Source/AppIconOptionsController.m @@ -1,12 +1,12 @@ #import "AppIconOptionsController.h" +#import @interface AppIconOptionsController () @property (strong, nonatomic) UITableView *tableView; +@property (strong, nonatomic) UIButton *backButton; @property (strong, nonatomic) NSArray *appIcons; @property (assign, nonatomic) NSInteger selectedIconIndex; -@property (strong, nonatomic) UIImageView *backButton; -@property (assign, nonatomic) UIUserInterfaceStyle pageStyle; @end @@ -23,20 +23,23 @@ self.tableView = [[UITableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; self.tableView.dataSource = self; self.tableView.delegate = self; - self.tableView.backgroundColor = (self.pageStyle == UIUserInterfaceStyleLight) ? [UIColor whiteColor] : [UIColor blackColor]; [self.view addSubview:self.tableView]; - UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"Back.png" inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil] style:UIBarButtonItemStylePlain target:self action:@selector(back)]; - [backButton setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor blackColor], NSFontAttributeName: [UIFont fontWithName:@"YTSans-Medium" size:20]} forState:UIControlStateNormal]; - self.navigationItem.leftBarButtonItem = backButton; + self.backButton = [UIButton buttonWithType:UIButtonTypeCustom]; + [self.backButton setImage:[UIImage imageNamed:@"Back.png" inBundle:[NSBundle mainBundle] compatibleWithTraitCollection:nil] forState:UIControlStateNormal]; + [self.backButton addTarget:self action:@selector(back) forControlEvents:UIControlEventTouchUpInside]; + [self.backButton setFrame:CGRectMake(0, 0, 24, 24)]; + UIBarButtonItem *customBackButton = [[UIBarButtonItem alloc] initWithCustomView:self.backButton]; + self.navigationItem.leftBarButtonItem = customBackButton; + UIColor *buttonColor = [UIColor colorWithRed:203.0/255.0 green:22.0/255.0 blue:51.0/255.0 alpha:1.0]; UIBarButtonItem *resetButton = [[UIBarButtonItem alloc] initWithImage:[UIImage systemImageNamed:@"arrow.clockwise.circle.fill"] style:UIBarButtonItemStylePlain target:self action:@selector(resetIcon)]; - + UIBarButtonItem *saveButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveIcon)]; - [saveButton setTitleTextAttributes:@{NSForegroundColorAttributeName: [UIColor colorWithRed:203.0/255.0 green:22.0/255.0 blue:51.0/255.0 alpha:1.0], NSFontAttributeName: [UIFont fontWithName:@"YTSans-Medium" size:20]} forState:UIControlStateNormal]; - + [saveButton setTitleTextAttributes:@{NSForegroundColorAttributeName: buttonColor, NSFontAttributeName: [UIFont fontWithName:@"YTSans-Medium" size:17]} forState:UIControlStateNormal]; + self.navigationItem.rightBarButtonItems = @[saveButton, resetButton]; - + NSString *path = [[NSBundle mainBundle] pathForResource:@"YTLitePlus" ofType:@"bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:path]; self.appIcons = [bundle pathsForResourcesOfType:@"png" inDirectory:@"AppIcons"]; @@ -50,6 +53,10 @@ return self.appIcons.count; } +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return 60.0; +} + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; if (!cell) { @@ -57,32 +64,21 @@ } NSString *iconPath = self.appIcons[indexPath.row]; + cell.textLabel.text = [iconPath.lastPathComponent stringByDeletingPathExtension]; + UIImage *iconImage = [UIImage imageWithContentsOfFile:iconPath]; - - cell.backgroundColor = [UIColor whiteColor]; - cell.selectionStyle = UITableViewCellSelectionStyleNone; - - UIImageView *iconImageView = [[UIImageView alloc] initWithImage:iconImage]; - iconImageView.contentMode = UIViewContentModeScaleAspectFit; - iconImageView.frame = CGRectMake(16, 10, 30, 30); - [cell.contentView addSubview:iconImageView]; - - UILabel *iconNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(56, 5, self.view.frame.size.width - 56, 30)]; - iconNameLabel.text = [iconPath.lastPathComponent stringByDeletingPathExtension]; - iconNameLabel.textColor = [UIColor blackColor]; - iconNameLabel.font = [UIFont systemFontOfSize:16.0 weight:UIFontWeightMedium]; - [cell.contentView addSubview:iconNameLabel]; - + cell.imageView.image = iconImage; + cell.imageView.layer.cornerRadius = 10.0; + cell.imageView.clipsToBounds = YES; + cell.imageView.frame = CGRectMake(10, 10, 40, 40); + cell.textLabel.frame = CGRectMake(60, 10, self.view.frame.size.width - 70, 40); + if (indexPath.row == self.selectedIconIndex) { cell.accessoryType = UITableViewCellAccessoryCheckmark; } else { cell.accessoryType = UITableViewCellAccessoryNone; } - - UIView *separatorView = [[UIView alloc] initWithFrame:CGRectMake(0, cell.contentView.frame.size.height - 1, cell.contentView.frame.size.width, 1)]; - separatorView.backgroundColor = [UIColor lightGrayColor]; - [cell.contentView addSubview:separatorView]; - + return cell; } @@ -107,28 +103,44 @@ } - (void)saveIcon { - NSString *selectedIconPath = self.selectedIconIndex >= 0 ? self.appIcons[self.selectedIconIndex] : nil; - if (selectedIconPath) { - NSURL *iconURL = [NSURL fileURLWithPath:selectedIconPath]; - if ([[UIApplication sharedApplication] respondsToSelector:@selector(setAlternateIconName:completionHandler:)]) { - [[UIApplication sharedApplication] setAlternateIconName:selectedIconPath completionHandler:^(NSError * _Nullable error) { - if (error) { - NSLog(@"Error setting alternate icon: %@", error.localizedDescription); - [self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"]; - } else { - NSLog(@"Alternate icon set successfully"); - [self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"]; + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSString *selectedIcon = self.selectedIconIndex >= 0 ? self.appIcons[self.selectedIconIndex] : nil; + if (selectedIcon) { + NSString *iconName = [selectedIcon.lastPathComponent stringByDeletingPathExtension]; + NSString *plistPath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; + NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithContentsOfFile:plistPath]; + NSMutableDictionary *iconsDict = [infoDict objectForKey:@"CFBundleIcons"]; + + if (iconsDict) { + NSMutableDictionary *primaryIconDict = [iconsDict objectForKey:@"CFBundlePrimaryIcon"]; + if (primaryIconDict) { + NSMutableArray *iconFiles = [primaryIconDict objectForKey:@"CFBundleIconFiles"]; + [iconFiles addObject:iconName]; + primaryIconDict[@"CFBundleIconFiles"] = iconFiles; } - }]; + [infoDict setObject:iconsDict forKey:@"CFBundleIcons"]; + [infoDict writeToFile:plistPath atomically:YES]; + + [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) { + if (error) { + NSLog(@"Error setting alternate icon: %@", error.localizedDescription); + [self showAlertWithTitle:@"Error" message:@"Failed to set alternate icon"]; + } else { + NSLog(@"Alternate icon set successfully"); + [self showAlertWithTitle:@"Success" message:@"Alternate icon set successfully"]; + + dispatch_async(dispatch_get_main_queue(), ^{ + [self.tableView reloadData]; + }); + } + }]; + } else { + NSLog(@"CFBundleIcons key not found in Info.plist"); + } } else { - NSMutableDictionary *dict = [NSMutableDictionary dictionary]; - [dict setObject:iconURL forKey:@"iconURL"]; - NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Info" ofType:@"plist"]; - [dict writeToFile:filePath atomically:YES]; - - [self showAlertWithTitle:@"Alternate Icon" message:@"Please restart the app to apply the alternate icon"]; + NSLog(@"Selected icon path is nil"); } - } + }); } - (void)showAlertWithTitle:(NSString *)title message:(NSString *)message {