Compare commits
14 Commits
Author | SHA1 | Date | |
---|---|---|---|
4c780cf24d | |||
a197d363a0 | |||
ed84d40ee6 | |||
5a32a85e2a | |||
042c85fe63 | |||
a988ace5de | |||
31e49bedc7 | |||
91ea103e63 | |||
98a3a38cfc | |||
419938c34d | |||
804936739b | |||
7ddac35e83 | |||
e01de210cb | |||
bf6e2c6e01 |
9
Makefile
9
Makefile
@ -1,14 +1,15 @@
|
|||||||
ARCHS = arm64
|
ARCHS = arm64 arm64e
|
||||||
TARGET = iphone:clang:11.2:11.2
|
TARGET = iphone:clang:11.2:11.2
|
||||||
|
|
||||||
|
INSTALL_TARGET_PROCESSES = SpringBoard
|
||||||
|
|
||||||
include $(THEOS)/makefiles/common.mk
|
include $(THEOS)/makefiles/common.mk
|
||||||
|
|
||||||
TWEAK_NAME = CustomNoOlderNotifications
|
TWEAK_NAME = CustomNoOlderNotifications
|
||||||
|
|
||||||
CustomNoOlderNotifications_FILES = Tweak.xm
|
CustomNoOlderNotifications_FILES = Tweak.xm
|
||||||
|
CustomNoOlderNotifications_CFLAGS = -fobjc-arc
|
||||||
|
|
||||||
include $(THEOS_MAKE_PATH)/tweak.mk
|
include $(THEOS_MAKE_PATH)/tweak.mk
|
||||||
|
|
||||||
after-install::
|
|
||||||
install.exec "killall -9 SpringBoard"
|
|
||||||
SUBPROJECTS += cnonprefs
|
SUBPROJECTS += cnonprefs
|
||||||
include $(THEOS_MAKE_PATH)/aggregate.mk
|
include $(THEOS_MAKE_PATH)/aggregate.mk
|
||||||
|
@ -3,3 +3,7 @@
|
|||||||
CustomNoOlderNotifications or CNON for short is the first tweak I ever made
|
CustomNoOlderNotifications or CNON for short is the first tweak I ever made
|
||||||
|
|
||||||
It has been tested on iOS 11 and 12 and works (don't know about iOS 13)
|
It has been tested on iOS 11 and 12 and works (don't know about iOS 13)
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
1. Add https://yaypixxo.com/ to your sources in your package manager
|
||||||
|
2. Search for and install CustomNoOlderNotifications
|
83
Tweak.xm
83
Tweak.xm
@ -1,52 +1,71 @@
|
|||||||
|
// respring function
|
||||||
|
/*@interface FBSystemService : NSObject
|
||||||
|
+(id)sharedInstance;
|
||||||
|
-(void)exitAndRelaunch:(bool)arg1;
|
||||||
|
@end
|
||||||
|
|
||||||
|
static void RespringDevice() {
|
||||||
|
[[%c(FBSystemService) sharedInstance] exitAndRelaunch:YES];
|
||||||
|
}*/
|
||||||
|
|
||||||
|
// headers
|
||||||
@interface SBUILegibilityLabel : UIView
|
@interface SBUILegibilityLabel : UIView
|
||||||
@property (nonatomic,copy) NSString *string;
|
@property (nonatomic,copy) NSString *string;
|
||||||
|
@property (assign,nonatomic) long long textAlignment;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
@interface NCNotificationListSectionRevealHintView : UIView
|
@interface NCNotificationListSectionRevealHintView : UIView
|
||||||
-(void)_updateHintTitle;
|
@property (nonatomic,retain)SBUILegibilityLabel *revealHintTitle;
|
||||||
@end
|
@end
|
||||||
|
|
||||||
|
// prefs
|
||||||
|
@interface NSUserDefaults (CnonPrefs)
|
||||||
|
-(id)objectForKey:(NSString *)key inDomain:(NSString *)domain;
|
||||||
|
-(void)setObject:(id)value forKey:(NSString *)key inDomain:(NSString *)domain;
|
||||||
|
@end
|
||||||
|
|
||||||
|
static NSString *nsDomainString = @"com.yaypixxo.cnon";
|
||||||
|
static NSString *nsNotificationString = @"com.yaypixxo.cnon/preferences.changed";
|
||||||
|
|
||||||
|
// declare switch and string
|
||||||
static BOOL enabled;
|
static BOOL enabled;
|
||||||
static NSString* customText = @"";
|
static NSString *customText = @"";
|
||||||
|
|
||||||
#define kIdentifier @"com.yaypixxo.cnonprefs"
|
static void notificationCallback(CFNotificationCenterRef center, void *observer, CFStringRef name, const void *object, CFDictionaryRef userInfo) {
|
||||||
#define kSettingsChangedNotification (CFStringRef)@"com.yaypixxo.cnonprefs/ReloadPrefs"
|
NSNumber *eEnabled = (NSNumber *)[[NSUserDefaults standardUserDefaults] objectForKey:@"enabled" inDomain:nsDomainString];
|
||||||
#define kSettingsPath @"/var/mobile/Library/Preferences/com.yaypixxo.cnonprefs.plist"
|
NSString *eCustomText = (NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:@"customText" inDomain:nsDomainString];
|
||||||
|
|
||||||
|
enabled = (eEnabled) ? [eEnabled boolValue]:NO;
|
||||||
|
customText = eCustomText;
|
||||||
|
}
|
||||||
|
|
||||||
|
// check iOS version
|
||||||
|
#ifndef kCFCoreFoundationVersionNumber_iOS_13_0
|
||||||
|
#define kCFCoreFoundationVersionNumber_iOS_13_0 1665.15
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define kSLSystemVersioniOS13 kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_13_0
|
||||||
|
|
||||||
|
// hook class
|
||||||
%hook NCNotificationListSectionRevealHintView
|
%hook NCNotificationListSectionRevealHintView
|
||||||
|
|
||||||
-(void)layoutSubviews {
|
-(void)didMoveToWindow {
|
||||||
%orig;
|
%orig;
|
||||||
if (enabled) {
|
if (enabled) {
|
||||||
[MSHookIvar<UILabel *>(self, "_revealHintTitle") setString:customText];
|
self.revealHintTitle.string = customText;
|
||||||
|
if (kSLSystemVersioniOS13) {
|
||||||
|
self.revealHintTitle.textAlignment = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
%end
|
%end
|
||||||
|
|
||||||
static void reloadPrefs() {
|
|
||||||
CFPreferencesAppSynchronize((CFStringRef)kIdentifier);
|
|
||||||
|
|
||||||
NSDictionary *prefs = nil;
|
|
||||||
if ([NSHomeDirectory() isEqualToString:@"/var/mobile"]) {
|
|
||||||
CFArrayRef keyList = CFPreferencesCopyKeyList((CFStringRef)kIdentifier, kCFPreferencesCurrentUser, kCFPreferencesAnyHost);
|
|
||||||
if (keyList != nil) {
|
|
||||||
prefs = (NSDictionary *)CFBridgingRelease(CFPreferencesCopyMultiple(keyList, (CFStringRef)kIdentifier, kCFPreferencesCurrentUser, kCFPreferencesAnyHost));
|
|
||||||
if (prefs == nil)
|
|
||||||
prefs = [NSDictionary dictionary];
|
|
||||||
CFRelease(keyList);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
prefs = [NSDictionary dictionaryWithContentsOfFile:kSettingsPath];
|
|
||||||
}
|
|
||||||
|
|
||||||
enabled = [prefs objectForKey:@"enabled"] ? [(NSNumber *)[prefs objectForKey:@"enabled"] boolValue] : true;
|
|
||||||
customText = [prefs objectForKey:@"customText"] ? [prefs objectForKey:@"customText"] : changeNotiTxt;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
%ctor {
|
%ctor {
|
||||||
reloadPrefs();
|
// prefs changed listener
|
||||||
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)reloadPrefs, kSettingsChangedNotification, NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
|
notificationCallback(NULL, NULL, NULL, NULL, NULL);
|
||||||
|
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, notificationCallback, (CFStringRef)nsNotificationString, NULL, CFNotificationSuspensionBehaviorCoalesce);
|
||||||
|
|
||||||
|
// respring notification listener
|
||||||
|
//CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)RespringDevice, CFSTR("com.yaypixxo.cnon/respring"), NULL, CFNotificationSuspensionBehaviorDeliverImmediately);
|
||||||
}
|
}
|
@ -1,41 +1,44 @@
|
|||||||
#include "CNONRootListController.h"
|
#include "CNONRootListController.h"
|
||||||
#import <spawn.h>
|
|
||||||
|
|
||||||
@implementation CNONRootListController
|
@implementation CNONRootListController
|
||||||
|
|
||||||
- (NSArray *)specifiers {
|
- (NSArray *)specifiers {
|
||||||
if (!_specifiers) {
|
if (!_specifiers) {
|
||||||
_specifiers = [[self loadSpecifiersFromPlistName:@"Root" target:self] retain];
|
_specifiers = [self loadSpecifiersFromPlistName:@"Root" target:self];
|
||||||
}
|
}
|
||||||
|
|
||||||
return _specifiers;
|
return _specifiers;
|
||||||
}
|
}
|
||||||
|
|
||||||
- (void)respring:(id)sender {
|
-(void)openTwitter {
|
||||||
[self.view endEditing:YES];
|
|
||||||
[NSThread sleepForTimeInterval:0.5f];
|
|
||||||
pid_t pid;
|
|
||||||
const char* args[] = {"killall", "backboardd", NULL};
|
|
||||||
posix_spawn(&pid, "/usr/bin/killall", NULL, NULL, (char* const*)args, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
- (void)openTwitter {
|
|
||||||
NSURL *url;
|
NSURL *url;
|
||||||
|
|
||||||
|
// check which of these apps are installed
|
||||||
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tweetbot:"]]) {
|
if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tweetbot:"]]) {
|
||||||
url = [NSURL URLWithString:@"tweetbot:///user_profile/Ra1nPix"];
|
url = [NSURL URLWithString:@"tweetbot:///user_profile/Ra1nPix"];
|
||||||
} else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitterrific:"]]) {
|
}
|
||||||
|
else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitterrific:"]]) {
|
||||||
url = [NSURL URLWithString:@"twitterrific:///profile?screen_name=Ra1nPix"];
|
url = [NSURL URLWithString:@"twitterrific:///profile?screen_name=Ra1nPix"];
|
||||||
} else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tweetings:"]]) {
|
}
|
||||||
|
else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"tweetings:"]]) {
|
||||||
url = [NSURL URLWithString:@"tweetings:///user?screen_name=Ra1nPix"];
|
url = [NSURL URLWithString:@"tweetings:///user?screen_name=Ra1nPix"];
|
||||||
} else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter:"]]) {
|
}
|
||||||
|
else if ([[UIApplication sharedApplication] canOpenURL:[NSURL URLWithString:@"twitter:"]]) {
|
||||||
url = [NSURL URLWithString:@"twitter://user?screen_name=Ra1nPix"];
|
url = [NSURL URLWithString:@"twitter://user?screen_name=Ra1nPix"];
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
url = [NSURL URLWithString:@"https://mobile.twitter.com/Ra1nPix"];
|
url = [NSURL URLWithString:@"https://mobile.twitter.com/Ra1nPix"];
|
||||||
}
|
}
|
||||||
|
|
||||||
// [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
|
// open my profile in the app chosen above
|
||||||
[[UIApplication sharedApplication] openURL:url];
|
// if you're compiling with an iOS 10 or lower sdk you can leave out options:@{} and completionHandler:nil
|
||||||
|
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
|
||||||
|
}
|
||||||
|
|
||||||
|
// send respring notification
|
||||||
|
-(void)apply {
|
||||||
|
[self.view endEditing:YES];
|
||||||
|
//CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), CFSTR("com.yaypixxo.cnon/respring"), NULL, NULL, YES);
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
@ -1,13 +1,15 @@
|
|||||||
ARCHS = arm64
|
ARCHS = arm64 arm64e
|
||||||
TARGET = iphone:11.2:11.2
|
TARGET = iphone:clang:11.2:11.2
|
||||||
|
|
||||||
include $(THEOS)/makefiles/common.mk
|
include $(THEOS)/makefiles/common.mk
|
||||||
|
|
||||||
BUNDLE_NAME = cnonprefs
|
BUNDLE_NAME = cnonprefs
|
||||||
|
|
||||||
cnonprefs_FILES = CNONRootListController.m
|
cnonprefs_FILES = CNONRootListController.m
|
||||||
cnonprefs_INSTALL_PATH = /Library/PreferenceBundles
|
cnonprefs_INSTALL_PATH = /Library/PreferenceBundles
|
||||||
cnonprefs_FRAMEWORKS = UIKit
|
cnonprefs_FRAMEWORKS = UIKit
|
||||||
cnonprefs_PRIVATE_FRAMEWORKS = Preferences
|
cnonprefs_PRIVATE_FRAMEWORKS = Preferences
|
||||||
|
cnonprefs_CFLAGS = -fobjc-arc
|
||||||
|
|
||||||
include $(THEOS_MAKE_PATH)/bundle.mk
|
include $(THEOS_MAKE_PATH)/bundle.mk
|
||||||
|
|
||||||
|
BIN
cnonprefs/Resources/.DS_Store
vendored
Normal file
BIN
cnonprefs/Resources/.DS_Store
vendored
Normal file
Binary file not shown.
@ -10,25 +10,25 @@
|
|||||||
<key>default</key>
|
<key>default</key>
|
||||||
<true/>
|
<true/>
|
||||||
<key>defaults</key>
|
<key>defaults</key>
|
||||||
<string>com.yaypixxo.cnonprefs</string>
|
<string>com.yaypixxo.cnon</string>
|
||||||
<key>key</key>
|
<key>key</key>
|
||||||
<string>enabled</string>
|
<string>enabled</string>
|
||||||
<key>label</key>
|
<key>label</key>
|
||||||
<string>Enable</string>
|
<string>Enable</string>
|
||||||
<key>PostNotification</key>
|
<key>PostNotification</key>
|
||||||
<string>com.yaypixxo.cnonprefs/ReloadPrefs</string>
|
<string>com.yaypixxo.cnon/preferences.changed</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>cell</key>
|
<key>cell</key>
|
||||||
<string>PSGroupCell</string>
|
<string>PSGroupCell</string>
|
||||||
<key>footerText</key>
|
<key>footerText</key>
|
||||||
<string>Type your custom message or leave blank to hide the text.</string>
|
<string>Type your custom text or leave blank to hide the text</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>cell</key>
|
<key>cell</key>
|
||||||
<string>PSEditTextCell</string>
|
<string>PSEditTextCell</string>
|
||||||
<key>defaults</key>
|
<key>defaults</key>
|
||||||
<string>com.yaypixxo.cnonprefs</string>
|
<string>com.yaypixxo.cnon</string>
|
||||||
<key>default</key>
|
<key>default</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
<key>key</key>
|
<key>key</key>
|
||||||
@ -36,21 +36,21 @@
|
|||||||
<key>placeholder</key>
|
<key>placeholder</key>
|
||||||
<string>custom text here</string>
|
<string>custom text here</string>
|
||||||
<key>PostNotification</key>
|
<key>PostNotification</key>
|
||||||
<string>com.yaypixxo.cnonprefs/ReloadPrefs</string>
|
<string>com.yaypixxo.cnon/preferences.changed</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>cell</key>
|
<key>cell</key>
|
||||||
<string>PSButtonCell</string>
|
<string>PSButtonCell</string>
|
||||||
<key>action</key>
|
<key>action</key>
|
||||||
<string>respring</string>
|
<string>apply</string>
|
||||||
<key>label</key>
|
<key>label</key>
|
||||||
<string>Respring</string>
|
<string>Apply</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>cell</key>
|
<key>cell</key>
|
||||||
<string>PSGroupCell</string>
|
<string>PSGroupCell</string>
|
||||||
<key>label</key>
|
<key>label</key>
|
||||||
<string>Follow me</string>
|
<string>Follow me on Twitter</string>
|
||||||
</dict>
|
</dict>
|
||||||
<dict>
|
<dict>
|
||||||
<key>action</key>
|
<key>action</key>
|
||||||
@ -64,6 +64,6 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>title</key>
|
<key>title</key>
|
||||||
<string>CNON</string>
|
<string>CustomNoOlderNotifications</string>
|
||||||
</dict>
|
</dict>
|
||||||
</plist>
|
</plist>
|
||||||
|
BIN
cnonprefs/Resources/icon.png
Normal file
BIN
cnonprefs/Resources/icon.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
BIN
cnonprefs/Resources/icon@2x.png
Normal file
BIN
cnonprefs/Resources/icon@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.4 KiB |
BIN
cnonprefs/Resources/twitter@2x.png
Normal file
BIN
cnonprefs/Resources/twitter@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.5 KiB |
6
control
6
control
@ -1,10 +1,12 @@
|
|||||||
Package: com.yaypixxo.cnon
|
Package: com.yaypixxo.cnon
|
||||||
Name: CustomNoOlderNotifications
|
Name: CustomNoOlderNotifications
|
||||||
Depends: mobilesubstrate, preferenceloader
|
Depends: mobilesubstrate, preferenceloader
|
||||||
Version: 2.0.0
|
Version: 2.2.0
|
||||||
Architecture: iphoneos-arm
|
Architecture: iphoneos-arm
|
||||||
Description: Change the "No Older Notifications" text to a custom one!
|
Description: Change the "No Older Notifications" text to a custom one!
|
||||||
Depiction: http://yaypixxo.com/depiction?p=com.yaypixxo.cnon
|
Icon: https://yaypixxo.com/assets/com.yaypixxo.cnon.png
|
||||||
|
Depiction: https://yaypixxo.com/depictions?p=com.yaypixxo.cnon
|
||||||
|
SileoDepiction: https://yaypixxo.com/sileo/com.yaypixxo.com
|
||||||
Maintainer: YaYPIXXO <viggo@lekdorf.com>
|
Maintainer: YaYPIXXO <viggo@lekdorf.com>
|
||||||
Author: YaYPIXXO <viggo@lekdorf.com>
|
Author: YaYPIXXO <viggo@lekdorf.com>
|
||||||
Section: Tweaks
|
Section: Tweaks
|
||||||
|
Reference in New Issue
Block a user