summaryrefslogtreecommitdiff
path: root/.theos/obj/debug/arm64/Tweak.x.m
blob: 2e93ef1f16f9b8968b9c5d9b12ac13f26c8879a8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#line 1 "Tweak.x"

#include <substrate.h>
#if defined(__clang__)
#if __has_feature(objc_arc)
#define _LOGOS_SELF_TYPE_NORMAL __unsafe_unretained
#define _LOGOS_SELF_TYPE_INIT __attribute__((ns_consumed))
#define _LOGOS_SELF_CONST const
#define _LOGOS_RETURN_RETAINED __attribute__((ns_returns_retained))
#else
#define _LOGOS_SELF_TYPE_NORMAL
#define _LOGOS_SELF_TYPE_INIT
#define _LOGOS_SELF_CONST
#define _LOGOS_RETURN_RETAINED
#endif
#else
#define _LOGOS_SELF_TYPE_NORMAL
#define _LOGOS_SELF_TYPE_INIT
#define _LOGOS_SELF_CONST
#define _LOGOS_RETURN_RETAINED
#endif

@class CSMediaControlsView; @class SBMainSwitcherViewController; @class CSAdjunctListItemView; @class SBLockScreenManager; @class QRTMediaModuleViewController; @class SBMediaController; @class PLPlatterCustomContentView; 
static void _logos_meta_method$_ungrouped$CSMediaControlsView$removePlayer(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL); static void _logos_meta_method$_ungrouped$CSMediaControlsView$stateChanged$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST, SEL, NSNotification *); static void (*_logos_orig$_ungrouped$CSMediaControlsView$layoutSubviews)(_LOGOS_SELF_TYPE_NORMAL CSMediaControlsView* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$CSMediaControlsView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL CSMediaControlsView* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$CSAdjunctListItemView$layoutSubviews)(_LOGOS_SELF_TYPE_NORMAL CSAdjunctListItemView* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$CSAdjunctListItemView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL CSAdjunctListItemView* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$QRTMediaModuleViewController$layoutSubviews)(_LOGOS_SELF_TYPE_NORMAL QRTMediaModuleViewController* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$QRTMediaModuleViewController$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL QRTMediaModuleViewController* _LOGOS_SELF_CONST, SEL); static void (*_logos_orig$_ungrouped$PLPlatterCustomContentView$layoutSubviews)(_LOGOS_SELF_TYPE_NORMAL PLPlatterCustomContentView* _LOGOS_SELF_CONST, SEL); static void _logos_method$_ungrouped$PLPlatterCustomContentView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL PLPlatterCustomContentView* _LOGOS_SELF_CONST, SEL); 
static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBMediaController(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBMediaController"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBMainSwitcherViewController(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBMainSwitcherViewController"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$CSMediaControlsView(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("CSMediaControlsView"); } return _klass; }static __inline__ __attribute__((always_inline)) __attribute__((unused)) Class _logos_static_class_lookup$SBLockScreenManager(void) { static Class _klass; if(!_klass) { _klass = objc_getClass("SBLockScreenManager"); } return _klass; }
#line 1 "Tweak.x"
#import <Headers.h>
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;
			}
		}
	}
}
 
CSAdjunctListItem *item;
SBLockScreenManager *manager;
CSNotificationAdjunctListViewController *vc;
NSTimer *timer;
SBMainSwitcherViewController *mainSwitcher;
NSString *nowPlayingID;
NSArray *items;

static void _logos_meta_method$_ungrouped$CSMediaControlsView$removePlayer(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
	if ([[_logos_static_class_lookup$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];
					}
				}       
			}
		}       
	}
}

static void _logos_meta_method$_ungrouped$CSMediaControlsView$stateChanged$(_LOGOS_SELF_TYPE_NORMAL Class _LOGOS_SELF_CONST __unused self, SEL __unused _cmd, NSNotification * notification) {
	if ([[_logos_static_class_lookup$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: _logos_static_class_lookup$CSMediaControlsView()
					selector: @selector(removePlayer)
					userInfo: nil
					repeats: NO];
			}
		}
	}
}
static void _logos_method$_ungrouped$CSMediaControlsView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL CSMediaControlsView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
	reloadSettings();
	manager = [_logos_static_class_lookup$SBLockScreenManager() sharedInstance];
	vc = [[[[manager coverSheetViewController] mainPageContentViewController] combinedListViewController] adjunctListViewController];
	item = [vc.identifiersToItems objectForKey:@"SBDashBoardNowPlayingAssertionIdentifier"];
	mainSwitcher = [_logos_static_class_lookup$SBMainSwitcherViewController() sharedInstance];
	items = mainSwitcher.recentAppLayouts;
	nowPlayingID = [[[_logos_static_class_lookup$SBMediaController() sharedInstance] nowPlayingApplication] bundleIdentifier];
	UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:_logos_static_class_lookup$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];
	_logos_orig$_ungrouped$CSMediaControlsView$layoutSubviews(self, _cmd);
}


static void _logos_method$_ungrouped$CSAdjunctListItemView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL CSAdjunctListItemView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
	UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:_logos_static_class_lookup$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];
	_logos_orig$_ungrouped$CSAdjunctListItemView$layoutSubviews(self, _cmd);
}


static void _logos_method$_ungrouped$QRTMediaModuleViewController$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL QRTMediaModuleViewController* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
	UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:_logos_static_class_lookup$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];
	_logos_orig$_ungrouped$QRTMediaModuleViewController$layoutSubviews(self, _cmd);
}


static void _logos_method$_ungrouped$PLPlatterCustomContentView$layoutSubviews(_LOGOS_SELF_TYPE_NORMAL PLPlatterCustomContentView* _LOGOS_SELF_CONST __unused self, SEL __unused _cmd) {
	UISwipeGestureRecognizer *gesture = [[UISwipeGestureRecognizer alloc]initWithTarget:_logos_static_class_lookup$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];
	_logos_orig$_ungrouped$PLPlatterCustomContentView$layoutSubviews(self, _cmd);
}

static __attribute__((constructor)) void _logosLocalCtor_b2403fe0(int __unused argc, char __unused **argv, char __unused **envp) {
	reloadSettings();
	[[NSNotificationCenter defaultCenter] addObserver:_logos_static_class_lookup$CSMediaControlsView() selector:@selector(stateChanged:) name:@"SBMediaNowPlayingChangedNotification" object:nil];
}

static __attribute__((constructor)) void _logosLocalInit() {
{Class _logos_class$_ungrouped$CSMediaControlsView = objc_getClass("CSMediaControlsView"); Class _logos_metaclass$_ungrouped$CSMediaControlsView = object_getClass(_logos_class$_ungrouped$CSMediaControlsView); { char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$CSMediaControlsView, @selector(removePlayer), (IMP)&_logos_meta_method$_ungrouped$CSMediaControlsView$removePlayer, _typeEncoding); }{ char _typeEncoding[1024]; unsigned int i = 0; _typeEncoding[i] = 'v'; i += 1; _typeEncoding[i] = '@'; i += 1; _typeEncoding[i] = ':'; i += 1; memcpy(_typeEncoding + i, @encode(NSNotification *), strlen(@encode(NSNotification *))); i += strlen(@encode(NSNotification *)); _typeEncoding[i] = '\0'; class_addMethod(_logos_metaclass$_ungrouped$CSMediaControlsView, @selector(stateChanged:), (IMP)&_logos_meta_method$_ungrouped$CSMediaControlsView$stateChanged$, _typeEncoding); }MSHookMessageEx(_logos_class$_ungrouped$CSMediaControlsView, @selector(layoutSubviews), (IMP)&_logos_method$_ungrouped$CSMediaControlsView$layoutSubviews, (IMP*)&_logos_orig$_ungrouped$CSMediaControlsView$layoutSubviews);Class _logos_class$_ungrouped$CSAdjunctListItemView = objc_getClass("CSAdjunctListItemView"); MSHookMessageEx(_logos_class$_ungrouped$CSAdjunctListItemView, @selector(layoutSubviews), (IMP)&_logos_method$_ungrouped$CSAdjunctListItemView$layoutSubviews, (IMP*)&_logos_orig$_ungrouped$CSAdjunctListItemView$layoutSubviews);Class _logos_class$_ungrouped$QRTMediaModuleViewController = objc_getClass("QRTMediaModuleViewController"); MSHookMessageEx(_logos_class$_ungrouped$QRTMediaModuleViewController, @selector(layoutSubviews), (IMP)&_logos_method$_ungrouped$QRTMediaModuleViewController$layoutSubviews, (IMP*)&_logos_orig$_ungrouped$QRTMediaModuleViewController$layoutSubviews);Class _logos_class$_ungrouped$PLPlatterCustomContentView = objc_getClass("PLPlatterCustomContentView"); MSHookMessageEx(_logos_class$_ungrouped$PLPlatterCustomContentView, @selector(layoutSubviews), (IMP)&_logos_method$_ungrouped$PLPlatterCustomContentView$layoutSubviews, (IMP*)&_logos_orig$_ungrouped$PLPlatterCustomContentView$layoutSubviews);} }
#line 175 "Tweak.x"