mirror of
				https://github.com/SoPat712/YTLitePlus.git
				synced 2025-10-29 20:10:41 -04:00 
			
		
		
		
	Better AppIconOptionsController UI
This commit is contained in:
		| @@ -1,12 +1,12 @@ | ||||
| #import "AppIconOptionsController.h" | ||||
| #import <YouTubeHeader/YTAssetLoader.h> | ||||
|  | ||||
| @interface AppIconOptionsController () <UITableViewDataSource, UITableViewDelegate> | ||||
|  | ||||
| @property (strong, nonatomic) UITableView *tableView; | ||||
| @property (strong, nonatomic) UIButton *backButton; | ||||
| @property (strong, nonatomic) NSArray<NSString *> *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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 arichornlover
					arichornlover