diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..faf8687 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.theos/ +packages/ +.DS_Store diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f8dc5b1 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Nightwind + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..cd5fe16 --- /dev/null +++ b/Makefile @@ -0,0 +1,16 @@ +export TARGET = iphone:clang:latest:16.0 +export ARCHS = arm64 arm64e + +INSTALL_TARGET_PROCESSES = SpringBoard MediaRemoteUI + +include $(THEOS)/makefiles/common.mk + +TWEAK_NAME = MusicPlayerControlsColor + +MusicPlayerControlsColor_FILES = Tweak.x Utils.m +MusicPlayerControlsColor_LIBRARIES = gcuniversal +MusicPlayerControlsColor_CFLAGS = -fobjc-arc + +include $(THEOS_MAKE_PATH)/tweak.mk +SUBPROJECTS += musicplayercontrolscolorsettings +include $(THEOS_MAKE_PATH)/aggregate.mk diff --git a/MediaRemoteUI.h b/MediaRemoteUI.h new file mode 100644 index 0000000..1b0e563 --- /dev/null +++ b/MediaRemoteUI.h @@ -0,0 +1,61 @@ +/** + * Copyright (c) 2024 Nightwind + */ + +#import +#import + +API_AVAILABLE(ios(12.0)) +@interface MPRouteLabel : UIView +@property (nonatomic, strong, readwrite) UIColor *textColor; +@end + +API_AVAILABLE(ios(16.0)) +@interface MRUMarqueeLabel : UIView +@property (nonatomic, strong, readwrite) UIColor *textColor; +@end + +API_AVAILABLE(ios(14.0)) +@interface MRUNowPlayingLabelView : UIView +@property (nonatomic, strong, readwrite) MPRouteLabel *routeLabel; +@property (nonatomic, strong, readwrite) MRUMarqueeLabel *titleMarqueeView; +@property (nonatomic, strong, readwrite) MRUMarqueeLabel *subtitleMarqueeView; +@property (nonatomic, strong, readwrite) MRUMarqueeLabel *placeholderMarqueeView API_AVAILABLE(ios(16.0)); +@end + +API_AVAILABLE(ios(16.0)) +@interface MRUCAPackageView : UIView +@property (nonatomic, assign, readwrite) CATransform3D permanentTransform; +@property (nonatomic, strong, readwrite) CALayer *packageLayer; +@property (nonatomic, strong, readonly) NSString *packageName; +- (void)mru_applyVisualStylingWithColor:(UIColor *)color alpha:(CGFloat)alpha blendMode:(CGBlendMode)blendMode; +@end + +API_AVAILABLE(ios(14.0)) +@interface MRUTransportButton : UIView +@end + +API_AVAILABLE(ios(16.0)) +@interface MRUSlider : UIView +@property (nonatomic, strong, readwrite) UIView *minTrack __attribute__((availability(ios, introduced=16.0, obsoleted=17.0))); +@property (nonatomic, strong, readwrite) UIView *maxTrack __attribute__((availability(ios, introduced=16.0, obsoleted=17.0))); +@end + +API_AVAILABLE(ios(14.0)) +@interface MRUNowPlayingTimeControlsView : UIView +@property (nonatomic, strong, readwrite) MRUSlider *slider API_AVAILABLE(ios(16.0)); +@property (nonatomic, strong, readwrite) UILabel *elapsedTimeLabel; +@property (nonatomic, strong, readwrite) UILabel *remainingTimeLabel; +@end + +API_AVAILABLE(ios(14.0)) +@interface MRUNowPlayingVolumeControlsView : UIView +@property (nonatomic, strong, readwrite) MRUSlider *slider; +@property (nonatomic, strong, readwrite) UIImageView *minImageView API_AVAILABLE(ios(16.0)); +@property (nonatomic, strong, readwrite) UIImageView *maxImageView API_AVAILABLE(ios(16.0)); +@end + +API_AVAILABLE(ios(16.0)) +@interface MRUWaveformView : UIView +@property (nonatomic, retain) NSArray *bars; +@end \ No newline at end of file diff --git a/MusicPlayerControlsColor.plist b/MusicPlayerControlsColor.plist new file mode 100644 index 0000000..111974a --- /dev/null +++ b/MusicPlayerControlsColor.plist @@ -0,0 +1 @@ +{ Filter = { Bundles = ( "com.apple.springboard", "com.apple.MediaRemoteUI" ); }; } diff --git a/README.md b/README.md new file mode 100644 index 0000000..22c19d2 --- /dev/null +++ b/README.md @@ -0,0 +1,13 @@ + + +# MusicPlayerControlsColor +### Compatible with iOS 16. +Colorize the various elements of the music player on iOS 16! + +#### Bounty +This tweak was made as a private tweak bounty. Separate from [MusicPlayerColor](https://github.com/NightwindDev/MusicPlayerColor) as per the person's request. + +#### License +This project is licensed under [MIT](LICENSE). + +###### Copyright (c) 2024 Nightwind \ No newline at end of file diff --git a/Tweak.x b/Tweak.x new file mode 100644 index 0000000..eddb14b --- /dev/null +++ b/Tweak.x @@ -0,0 +1,216 @@ +/** + * Copyright (c) 2024 Nightwind + */ + + +#import +#import "MediaRemoteUI.h" + + +extern UIColor *const colorForKey(NSString *const key); + + +%group NowPlayingHeaderSection +%hook MRUNowPlayingLabelView + +- (void)updateVisualStyling {} + +- (void)didMoveToSuperview { + %orig; + + self.routeLabel.textColor = colorForKey(@"RouteLabelColor"); + self.titleMarqueeView.textColor = colorForKey(@"TitleColor"); + self.subtitleMarqueeView.textColor = colorForKey(@"SubtitleColor"); + self.placeholderMarqueeView.textColor = colorForKey(@"PlaceholderColor"); +} + +%end +%end // NowPlayingHeaderSection + + +%group NowPlayingButtonsSection +%hook MRUCAPackageView + +- (void)layoutSubviews { + %orig; + + NSString *const packageName = [self packageName]; + if (!packageName) return; + + UIColor *const playButtonColor = colorForKey(@"PlayButtonColor"); + UIColor *const backwardsButtonColor = colorForKey(@"BackwardsButtonColor"); + UIColor *const forwardsButtonColor = colorForKey(@"ForwardsButtonColor"); + + if ([packageName isEqualToString:@"PlayPauseStop"]) { + [self mru_applyVisualStylingWithColor:playButtonColor alpha:1.0f blendMode:kCGBlendModeNormal]; + } else if ([packageName isEqualToString:@"ForwardBackward"]) { + const BOOL isBackwardsImage = self.permanentTransform.m11 == -1; + + if (isBackwardsImage) { + [self mru_applyVisualStylingWithColor:backwardsButtonColor alpha:1.0f blendMode:kCGBlendModeNormal]; + } else { + [self mru_applyVisualStylingWithColor:forwardsButtonColor alpha:1.0f blendMode:kCGBlendModeNormal]; + } + } +} + +%end +%end // NowPlayingButtonsSection + + +%group TransportButtonSection +%hook MRUTransportButton + +- (void)updateVisualStyling {} + +%end +%end // TransportButtonSection + + +%group RoutingButtonSection +%hook MRUNowPlayingTransportControlsView + +- (void)updateVisualStyling {} +- (void)updateVisibility {} + +- (MRUTransportButton *)routingButton { + MRUTransportButton *const routingButton = %orig; + routingButton.tintColor = colorForKey(@"RoutingButtonColor"); + routingButton.alpha = 1.0f; + return routingButton; +} + +%end + +%hook MRUControlCenterView + +- (MRUTransportButton *)routingButton { + MRUTransportButton *const routingButton = %orig; + routingButton.tintColor = colorForKey(@"RoutingButtonColor"); + routingButton.alpha = 1.0f; + return routingButton; +} + +%end +%end // RoutingButtonSection + + +%group WaveformSection +%hook MRUWaveformView + +- (void)updateVisualStyle {} + +- (void)didMoveToSuperview { + %orig; + + for (UIView *bar in [self bars]) { + bar.backgroundColor = colorForKey(@"WaveformColor"); + bar.alpha = 1.0f; + } +} + +- (void)applyContext:(NSUInteger)context { + /** + * 0 = dynamic island (color depends on artwork) + * 1 = music player (custom color) + */ + %orig(1); +} + +%end +%end // WaveformSection + + +%group SlidersSection +%hook MRUSlider + +- (void)updateVisualStyling {} + +%end +%end + + +%group TimeControlsSection +%hook MRUNowPlayingTimeControlsView + +- (void)updateVisualStyling {} + +- (void)didMoveToSuperview { + %orig; + + self.slider.minTrack.backgroundColor = colorForKey(@"TimeMinTrackColor"); + self.slider.maxTrack.backgroundColor = colorForKey(@"TimeMaxTrackColor"); + self.elapsedTimeLabel.textColor = colorForKey(@"ElapsedTimeTextColor"); + self.remainingTimeLabel.textColor = colorForKey(@"RemainingTimeTextColor"); +} + +%end +%end // TimeControlsSection + + +%group VolumeControlsSection +%hook MRUNowPlayingVolumeControlsView + +- (void)updateVisualStyling {} + +- (void)didMoveToSuperview { + %orig; + + self.slider.minTrack.backgroundColor = colorForKey(@"VolumeMinTrackColor"); + self.slider.maxTrack.backgroundColor = colorForKey(@"VolumeMaxTrackColor"); + self.maxImageView.tintColor = colorForKey(@"MinVolumeIconColor"); + self.minImageView.tintColor = colorForKey(@"MaxVolumeIconColor"); +} + +%end +%end // VolumeControlsSection + + +%ctor { + NSDictionary *const prefs = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.nightwind.musicplayercontrolscolorsettings.plist"]; + + const BOOL (^boolForKey)(NSString *) = ^BOOL(NSString *key) { + return [prefs objectForKey:key] ? [[prefs objectForKey:key] boolValue] : YES; + }; + + if (!boolForKey(@"TweakEnabled")) return; + + const BOOL nowPlayingHeaderSectionEnabled = boolForKey(@"NowPlayingHeaderSectionEnabled"); + const BOOL nowPlayingButtonsSectionEnabled = boolForKey(@"NowPlayingButtonsSectionEnabled"); + const BOOL routingButtonSectionEnabled = boolForKey(@"RoutingButtonSectionEnabled"); + const BOOL waveformSectionEnabled = boolForKey(@"WaveformSectionEnabled"); + const BOOL timeControlsSectionEnabled = boolForKey(@"TimeControlsSectionEnabled"); + const BOOL volumeControlsSectionEnabled = boolForKey(@"VolumeControlsSectionEnabled"); + + if (nowPlayingHeaderSectionEnabled || nowPlayingButtonsSectionEnabled || routingButtonSectionEnabled) { + %init(TransportButtonSection); + } + + if (timeControlsSectionEnabled || volumeControlsSectionEnabled) { + %init(SlidersSection); + } + + if (nowPlayingHeaderSectionEnabled) { + %init(NowPlayingHeaderSection); + } + + if (nowPlayingButtonsSectionEnabled) { + %init(NowPlayingButtonsSection); + } + + if (routingButtonSectionEnabled) { + %init(RoutingButtonSection); + } + + if (waveformSectionEnabled) { + %init(WaveformSection); + } + + if (timeControlsSectionEnabled) { + %init(TimeControlsSection); + } + + if (volumeControlsSectionEnabled) { + %init(VolumeControlsSection); + } +} \ No newline at end of file diff --git a/Utils.m b/Utils.m new file mode 100644 index 0000000..b892b44 --- /dev/null +++ b/Utils.m @@ -0,0 +1,27 @@ +/** + * Copyright (c) 2024 Nightwind + */ + +#import +#import + +UIColor *const colorForKey(NSString *const key) { + NSDictionary *const prefs = [NSDictionary dictionaryWithContentsOfFile:@"/var/mobile/Library/Preferences/com.nightwind.musicplayercontrolscolorsettings.plist"]; + NSString *const hexString = [prefs objectForKey:key]; + + if (!hexString) return [UIColor whiteColor]; + + unsigned rgbValue = 0; + NSScanner *const scanner = [NSScanner scannerWithString:hexString]; + if ([hexString hasPrefix:@"#"]) { + scanner.scanLocation = 1; + } + [scanner scanHexInt:&rgbValue]; + + return [UIColor + colorWithRed:((rgbValue >> 24) & 0xFF) / 255.0 + green:((rgbValue >> 16) & 0xFF) / 255.0 + blue:((rgbValue >> 8) & 0xFF) / 255.0 + alpha:(rgbValue & 0xFF) / 255.0 + ]; +} \ No newline at end of file diff --git a/control b/control new file mode 100644 index 0000000..35c0c79 --- /dev/null +++ b/control @@ -0,0 +1,10 @@ +Package: com.nightwind.musicplayercontrolscolor +Name: MusicPlayerControlsColor +Version: 0.0.1 +Architecture: iphoneos-arm +Description: Colorize the various elements of the music player on iOS 16! +Maintainer: Nightwind +Author: Nightwind +Section: Tweaks +Depends: mobilesubstrate (>= 0.9.5000), firmware (>= 16.0), firmware (<< 17.0), com.mrgcgamer.libgcuniversal, preferenceloader +Icon: https://github.com/NightwindDev/MusicPlayerControlsColor/blob/main/icon.png?raw=true diff --git a/icon.png b/icon.png new file mode 100644 index 0000000..19f658c Binary files /dev/null and b/icon.png differ diff --git a/musicplayercontrolscolorsettings/MPCCRootListController.h b/musicplayercontrolscolorsettings/MPCCRootListController.h new file mode 100644 index 0000000..5a3dfa4 --- /dev/null +++ b/musicplayercontrolscolorsettings/MPCCRootListController.h @@ -0,0 +1,8 @@ +/** + * Copyright (c) 2024 Nightwind + */ + +#import + +@interface MPCCRootListController : PSListController +@end diff --git a/musicplayercontrolscolorsettings/MPCCRootListController.m b/musicplayercontrolscolorsettings/MPCCRootListController.m new file mode 100644 index 0000000..7fbd557 --- /dev/null +++ b/musicplayercontrolscolorsettings/MPCCRootListController.m @@ -0,0 +1,56 @@ +/** + * Copyright (c) 2024 Nightwind + */ + +#import +#import +#import +#import +#import "MPCCRootListController.h" + +@implementation MPCCRootListController + +- (NSArray *)specifiers { + if (!_specifiers) { + _specifiers = [self loadSpecifiersFromPlistName:@"Root" target:self]; + } + + return _specifiers; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + + UIImage *const applyImage = [[UIImage systemImageNamed:@"checkmark.circle"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate]; + self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithImage:applyImage style:UIBarButtonItemStylePlain target:self action:@selector(_performRespring)]; +} + +- (void)_performRespring { + [self setNeedsStatusBarAppearanceUpdate]; + + [UIView animateWithDuration:0.2 animations:^{ + NSArray *const connectedScenes = (NSArray *)UIApplication.sharedApplication.connectedScenes.allObjects; + for (UIWindow *window in connectedScenes.firstObject.windows) { + window.alpha = 0; + window.transform = CGAffineTransformMakeScale(0.95, 0.95); + } + } completion:^(BOOL finished) { + if (finished) { + [self _killProcessWithName:@"MediaRemoteUI"]; + [self _killProcessWithName:@"SpringBoard"]; + } + }]; +} + +- (void)_killProcessWithName:(NSString *)name { + if (!name) return; + + extern char **environ; + pid_t pid; + + const char *args[] = { "killall", [name UTF8String], NULL }; + posix_spawn(&pid, ROOT_PATH("/usr/bin/killall"), NULL, NULL, (char *const *)args, environ); + waitpid(pid, NULL, 0); +} + +@end diff --git a/musicplayercontrolscolorsettings/Makefile b/musicplayercontrolscolorsettings/Makefile new file mode 100644 index 0000000..5443745 --- /dev/null +++ b/musicplayercontrolscolorsettings/Makefile @@ -0,0 +1,11 @@ +include $(THEOS)/makefiles/common.mk + +BUNDLE_NAME = MusicPlayerControlsColorSettings + +MusicPlayerControlsColorSettings_FILES = MPCCRootListController.m +MusicPlayerControlsColorSettings_FRAMEWORKS = UIKit +MusicPlayerControlsColorSettings_PRIVATE_FRAMEWORKS = Preferences +MusicPlayerControlsColorSettings_INSTALL_PATH = /Library/PreferenceBundles +MusicPlayerControlsColorSettings_CFLAGS = -fobjc-arc + +include $(THEOS_MAKE_PATH)/bundle.mk diff --git a/musicplayercontrolscolorsettings/Resources/Info.plist b/musicplayercontrolscolorsettings/Resources/Info.plist new file mode 100644 index 0000000..5481daa --- /dev/null +++ b/musicplayercontrolscolorsettings/Resources/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + English + CFBundleExecutable + MusicPlayerControlsColorSettings + CFBundleIdentifier + com.nightwind.musicplayercontrolscolorsettings + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + NSPrincipalClass + MPCCRootListController + + diff --git a/musicplayercontrolscolorsettings/Resources/Root.plist b/musicplayercontrolscolorsettings/Resources/Root.plist new file mode 100644 index 0000000..44e07a9 --- /dev/null +++ b/musicplayercontrolscolorsettings/Resources/Root.plist @@ -0,0 +1,443 @@ + + + + + items + + + cell + PSGroupCell + label + Configure Tweak + + + cell + PSSwitchCell + label + Tweak Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + TweakEnabled + default + + + + cell + PSGroupCell + label + Now Playing Header + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + NowPlayingHeaderSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Route Label Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + RouteLabelColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Title Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + TitleColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Subtitle Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + SubtitleColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Placeholder Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + PlaceholderColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Now Playing Buttons + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + NowPlayingButtonsSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Backwards Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + BackwardsButtonColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Play Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + PlayButtonColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Forwards Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + ForwardsButtonColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Routing Button + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + RoutingButtonSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Routing Button Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + RoutingButtonColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Waveform + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + WaveformSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Waveform Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + WaveformColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Time Controls + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + TimeControlsSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Min Track Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + TimeMinTrackColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Max Track Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + TimeMaxTrackColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Elapsed Time Text Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + ElapsedTimeTextColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Remaining Time Text Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + RemainingTimeTextColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Volume Controls + + + cell + PSSwitchCell + label + Enabled + defaults + com.nightwind.musicplayercontrolscolorsettings + key + VolumeControlsSectionEnabled + default + + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Min Track Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + VolumeMinTrackColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Max Track Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + VolumeMaxTrackColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Min Volume Icon Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + MinVolumeIconColor + supportsAlpha + + fallback + ffffffff + + + cell + PSLinkCell + cellClass + GcColorPickerCell + label + Max Volume Icon Color + defaults + com.nightwind.musicplayercontrolscolorsettings + key + MaxVolumeIconColor + supportsAlpha + + fallback + ffffffff + + + cell + PSGroupCell + label + Contact + + + cell + PSLinkCell + cellClass + GcTwitterCell + accountLabel + NightwindDev + account + NightwindDev + URL + https://avatars.githubusercontent.com/u/81449663?v=4 + + + cell + PSButtonCell + cellClass + GcSocialCell + userName + MusicPlayerControlsColor + subtitle + Open Source on GitHub + accessoryType + 1 + pfpURL + https://github.com/NightwindDev/MusicPlayerControlsColor/blob/main/icon.png?raw=true + URL + https://github.com/NightwindDev/MusicPlayerControlsColor + + + title + MusicPlayerControlsColor + + diff --git a/musicplayercontrolscolorsettings/Resources/icon@3.png b/musicplayercontrolscolorsettings/Resources/icon@3.png new file mode 100644 index 0000000..6fed55d Binary files /dev/null and b/musicplayercontrolscolorsettings/Resources/icon@3.png differ diff --git a/musicplayercontrolscolorsettings/layout/Library/PreferenceLoader/Preferences/MusicPlayerControlsColorSettings.plist b/musicplayercontrolscolorsettings/layout/Library/PreferenceLoader/Preferences/MusicPlayerControlsColorSettings.plist new file mode 100644 index 0000000..418bb0d --- /dev/null +++ b/musicplayercontrolscolorsettings/layout/Library/PreferenceLoader/Preferences/MusicPlayerControlsColorSettings.plist @@ -0,0 +1,21 @@ + + + + + entry + + bundle + MusicPlayerControlsColorSettings + cell + PSLinkCell + detail + MPCCRootListController + icon + icon@3.png + isController + + label + MusicPlayerControlsColor + + +