From 8a752c04771b28d82dce988849cad84ddaf3ea2c Mon Sep 17 00:00:00 2001 From: FivePixels Date: Fri, 17 Jul 2020 10:06:30 -0500 Subject: Initial Commit --- Tweak.x | 174 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 Tweak.x (limited to 'Tweak.x') diff --git a/Tweak.x b/Tweak.x new file mode 100644 index 0000000..fdefda0 --- /dev/null +++ b/Tweak.x @@ -0,0 +1,174 @@ +#import +static BOOL enabled = YES; +static BOOL dismissPlayer = NO; +static BOOL killApp = NO; +static int timeOption = 0; +static int dismissGesture = 2; +static int timeValue = 0; +static id prefs; +static void reloadSettings() { + prefs = [[NSMutableDictionary alloc] initWithContentsOfFile:@"/var/mobile/Library/Preferences/com.5px.finical.plist"]; + if(prefs) { + enabled = [prefs objectForKey:@"enabled"] ? [[prefs objectForKey:@"enabled"] intValue] : enabled; + dismissPlayer = [prefs objectForKey:@"dismissPlayer"] ? [[prefs objectForKey:@"dismissPlayer"] intValue]: dismissPlayer; + killApp = [prefs objectForKey:@"killApp"] ? [[prefs objectForKey:@"killApp"] intValue]: killApp; + timeOption = [prefs objectForKey:@"timeOption"] ? [[prefs objectForKey:@"timeOption"] intValue]: timeOption; + timeValue = [prefs objectForKey:@"timeValue"] ? [[prefs objectForKey:@"timeValue"] intValue]: timeValue; + dismissGesture = [prefs objectForKey:@"dismissGesture"] ? [[prefs objectForKey:@"dismissGesture"] intValue]: dismissGesture; + if (dismissPlayer) { + switch (timeOption) { + case 0: + break; + case 1: + timeValue = timeValue * 60; + break; + case 2: + timeValue = timeValue * 3600; + break; + } + } + } +} +%hook CSMediaControlsView +CSAdjunctListItem *item; +SBLockScreenManager *manager; +CSNotificationAdjunctListViewController *vc; +NSTimer *timer; +SBMainSwitcherViewController *mainSwitcher; +NSString *nowPlayingID; +NSArray *items; +%new ++(void)removePlayer { + if ([[%c(SBMediaController) sharedInstance] isPaused]) { + if ([vc.identifiersToItems count] >= 1) { + [vc _removeItem:(id)item animated:(BOOL)YES]; + if (killApp) { + for (SBAppLayout *item in items) { + SBDisplayItem *currentItem = [item.rolesToLayoutItemsMap objectForKey:@1]; + NSString *bundleID = currentItem.bundleIdentifier; + if ([bundleID isEqualToString: nowPlayingID]) { + [mainSwitcher _deleteAppLayout:item forReason: 1]; + } + } + } + } + } +} +%new ++(void)stateChanged:(NSNotification *)notification { + if ([[%c(SBMediaController) sharedInstance] isPlaying]) { + if ([vc.identifiersToItems count] == 0) { + [vc _insertItem:(id)item animated:(BOOL)YES]; + } + } + if ([timer isValid]) { + [timer invalidate]; + timer = nil; + } + if (enabled) { + if ([vc.identifiersToItems count] == 1) { + if (dismissPlayer) { + timer = [NSTimer scheduledTimerWithTimeInterval: timeValue + target: %c(CSMediaControlsView) + selector: @selector(removePlayer) + userInfo: nil + repeats: NO]; + } + } + } +} +-(void)layoutSubviews { + reloadSettings(); + manager = [%c(SBLockScreenManager) sharedInstance]; + vc = [[[[manager coverSheetViewController] mainPageContentViewController] combinedListViewController] adjunctListViewController]; + item = [vc.identifiersToItems objectForKey:@"SBDashBoardNowPlayingAssertionIdentifier"]; + mainSwitcher = [%c(SBMainSwitcherViewController) sharedInstance]; + items = mainSwitcher.recentAppLayouts; + nowPlayingID = [[[%c(SBMediaController) sharedInstance] nowPlayingApplication] bundleIdentifier]; + UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:%c(CSMediaControlsView) action:@selector(removePlayer)]; + switch (dismissGesture) { + case 1: + gesture.direction = UISwipeGestureRecognizerDirectionRight; + break; + case 2: + gesture.direction = UISwipeGestureRecognizerDirectionUp; + break; + case 3: + gesture.direction = UISwipeGestureRecognizerDirectionDown; + break; + default: + gesture.direction = UISwipeGestureRecognizerDirectionLeft; + break; + } + [self addGestureRecognizer:gesture]; + %orig; +} +%end +%hook CSAdjunctListItemView +-(void)layoutSubviews { + UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:%c(CSMediaControlsView) action:@selector(removePlayer)]; + switch (dismissGesture) { + case 0: + gesture.direction = UISwipeGestureRecognizerDirectionLeft; + break; + case 1: + gesture.direction = UISwipeGestureRecognizerDirectionRight; + break; + case 2: + gesture.direction = UISwipeGestureRecognizerDirectionUp; + break; + case 3: + gesture.direction = UISwipeGestureRecognizerDirectionDown; + break; + } + [self addGestureRecognizer:gesture]; + %orig; +} +%end +%hook QRTMediaModuleViewController +-(void)layoutSubviews { + UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:%c(CSMediaControlsView) action:@selector(removePlayer)]; + switch (dismissGesture) { + case 0: + gesture.direction = UISwipeGestureRecognizerDirectionLeft; + break; + case 1: + gesture.direction = UISwipeGestureRecognizerDirectionRight; + break; + case 2: + gesture.direction = UISwipeGestureRecognizerDirectionUp; + break; + case 3: + gesture.direction = UISwipeGestureRecognizerDirectionDown; + break; + } + [self addGestureRecognizer:gesture]; + %orig; +} +%end +%hook PLPlatterCustomContentView +-(void)layoutSubviews { + UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:%c(CSMediaControlsView) action:@selector(removePlayer)]; + switch (dismissGesture) { + case 0: + gesture.direction = UISwipeGestureRecognizerDirectionLeft; + break; + case 1: + gesture.direction = UISwipeGestureRecognizerDirectionRight; + break; + case 2: + gesture.direction = UISwipeGestureRecognizerDirectionUp; + break; + case 3: + gesture.direction = UISwipeGestureRecognizerDirectionDown; + break; + } + [self addGestureRecognizer:gesture]; + %orig; +} +%end +%ctor { + reloadSettings(); + [[NSNotificationCenter defaultCenter] addObserver:%c(CSMediaControlsView) selector:@selector(stateChanged:) name:@"SBMediaNowPlayingChangedNotification" object:nil]; +} + -- cgit v1.2.3