diff --git a/.theos/_/DEBIAN/control b/.theos/_/DEBIAN/control
index 06f07ce..fd4e5d2 100644
--- a/.theos/_/DEBIAN/control
+++ b/.theos/_/DEBIAN/control
@@ -6,5 +6,5 @@ Description: Turns on AirplaneMode if you have low signal strength. Enable/disab
Maintainer: Joe Merlino
Author: Joe Merlino
Section: Tweaks
-Version: 0.0.1-2
-Installed-Size: 296
+Version: 0.0.1-4
+Installed-Size: 324
diff --git a/.theos/_/Library/MobileSubstrate/DynamicLibraries/AirplaneSignal.dylib b/.theos/_/Library/MobileSubstrate/DynamicLibraries/AirplaneSignal.dylib
index 6849269..69477d8 100755
Binary files a/.theos/_/Library/MobileSubstrate/DynamicLibraries/AirplaneSignal.dylib and b/.theos/_/Library/MobileSubstrate/DynamicLibraries/AirplaneSignal.dylib differ
diff --git a/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs b/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs
index a12b7c7..53dc64f 100755
Binary files a/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs and b/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs differ
diff --git a/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist b/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist
new file mode 100644
index 0000000..407d40a
--- /dev/null
+++ b/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist
@@ -0,0 +1,243 @@
+
+
+
+
+ items
+
+
+ cell
+ PSGroupCell
+ footerText
+ Choose the amount of strength to trigger AirplaneSignal. After the number of seconds you set, if the phone still has that low signal AirplaneSignal will enable Airplane mode. The tweak will also enable wifi and/or bluetooth after Airplane mode if they were enabled before but you can always enable wifi connectivity if you want.
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ enabled
+ label
+ Enabled
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
+
+ cell
+ PSLinkListCell
+ label
+ Signal strength
+ detail
+ PSListItemsController
+ default
+ 2
+ key
+ percentage
+ defaults
+ com.joemerlino.airplanesignal
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+ validTitles
+
+ 20% or less
+ 40% or less
+ 60% or less
+
+ validValues
+
+ 1
+ 2
+ 3
+
+
+
+ cell
+ PSLinkListCell
+ label
+ After
+ detail
+ PSListItemsController
+ default
+ 5
+ key
+ delay
+ defaults
+ com.joemerlino.airplanesignal
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+ validTitles
+
+ 5 sec
+ 10 sec
+ 15 sec
+ 20 sec
+ 25 sec
+ 30 sec
+ 35 sec
+ 40 sec
+ 45 sec
+ 50 sec
+
+ validValues
+
+ 5
+ 10
+ 15
+ 20
+ 25
+ 30
+ 35
+ 40
+ 45
+ 50
+
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ forcewifi
+ label
+ Always enable WiFi
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
+
+ cell
+ PSGroupCell
+ footerText
+ This feature allows to disable Airplane Mode and check the network after a set amount of minutes.
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ check
+ label
+ Re-check signal
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
+
+ cell
+ PSLinkListCell
+ label
+ After
+ detail
+ PSListItemsController
+ default
+ 300
+ key
+ checkmin
+ defaults
+ com.joemerlino.airplanesignal
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+ validTitles
+
+ 5 min
+ 10 min
+ 15 min
+ 20 min
+ 25 min
+ 30 min
+ 35 min
+ 40 min
+ 45 min
+ 50 min
+
+ validValues
+
+ 300
+ 600
+ 900
+ 1200
+ 1500
+ 1800
+ 2100
+ 2400
+ 2700
+ 3000
+
+
+
+ cell
+ PSGroupCell
+ footerText
+ This feature allows to "force downgrade" network speed (LTE -> 3G [or 3G -> EDGE on older iDevices]) before enabling airplane mode, since signal strength might be better on slower network.
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ downgradenetwork
+ label
+ Downgrade network speed
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
+
+ cell
+ PSGroupCell
+ footerText
+ Donation and contact email are the same, if you're already logged on PayPal you'll see that directly filled in.
+
+
+ action
+ twitter
+ alignment
+ center
+ cell
+ PSButtonCell
+ label
+ @joe_merlino
+
+
+ action
+ my_site
+ alignment
+ center
+ cell
+ PSButtonCell
+ label
+ GitHub
+
+
+ action
+ donate
+ alignment
+ center
+ cell
+ PSButtonCell
+ label
+ Buy Me a Coffee! (Donate)
+
+
+ action
+ sendEmail
+ alignment
+ center
+ cell
+ PSButtonCell
+ label
+ Send Mail
+
+
+ title
+ AirplaneSignal
+
+
diff --git a/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png b/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png
deleted file mode 100644
index 42daad8..0000000
Binary files a/.theos/_/Library/PreferenceBundles/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png and /dev/null differ
diff --git a/.theos/_/Library/Switches/AirplaneSignalToggle.bundle/AirplaneSignalToggle b/.theos/_/Library/Switches/AirplaneSignalToggle.bundle/AirplaneSignalToggle
index 27b5356..b391477 100755
Binary files a/.theos/_/Library/Switches/AirplaneSignalToggle.bundle/AirplaneSignalToggle and b/.theos/_/Library/Switches/AirplaneSignalToggle.bundle/AirplaneSignalToggle differ
diff --git a/.theos/last_package b/.theos/last_package
index dd2e2d9..aaacd7d 100644
--- a/.theos/last_package
+++ b/.theos/last_package
@@ -1 +1 @@
-./com.joemerlino.airplanesignal_0.0.1-2_iphoneos-arm.deb
+./com.joemerlino.airplanesignal_0.0.1-4_iphoneos-arm.deb
diff --git a/.theos/obj/AirplaneSignal.dylib b/.theos/obj/AirplaneSignal.dylib
index 6849269..69477d8 100755
Binary files a/.theos/obj/AirplaneSignal.dylib and b/.theos/obj/AirplaneSignal.dylib differ
diff --git a/.theos/obj/arm64/AirplaneSignal.dylib b/.theos/obj/arm64/AirplaneSignal.dylib
index 51afabc..2c79c0f 100755
Binary files a/.theos/obj/arm64/AirplaneSignal.dylib and b/.theos/obj/arm64/AirplaneSignal.dylib differ
diff --git a/.theos/obj/arm64/Tweak.xm.cdaed394.o b/.theos/obj/arm64/Tweak.xm.cdaed394.o
deleted file mode 100644
index d8989d2..0000000
Binary files a/.theos/obj/arm64/Tweak.xm.cdaed394.o and /dev/null differ
diff --git a/.theos/obj/arm64/Tweak.xm.e9ab706b.o b/.theos/obj/arm64/Tweak.xm.e9ab706b.o
new file mode 100644
index 0000000..d2e6961
Binary files /dev/null and b/.theos/obj/arm64/Tweak.xm.e9ab706b.o differ
diff --git a/.theos/obj/armv7/AirplaneSignal.dylib b/.theos/obj/armv7/AirplaneSignal.dylib
index b4ed945..9e5cda0 100755
Binary files a/.theos/obj/armv7/AirplaneSignal.dylib and b/.theos/obj/armv7/AirplaneSignal.dylib differ
diff --git a/.theos/obj/armv7/Tweak.xm.0b1e2b5c.o b/.theos/obj/armv7/Tweak.xm.0b1e2b5c.o
deleted file mode 100644
index 25c4f32..0000000
Binary files a/.theos/obj/armv7/Tweak.xm.0b1e2b5c.o and /dev/null differ
diff --git a/.theos/obj/armv7/Tweak.xm.7ebfd186.o b/.theos/obj/armv7/Tweak.xm.7ebfd186.o
new file mode 100644
index 0000000..f75d9c6
Binary files /dev/null and b/.theos/obj/armv7/Tweak.xm.7ebfd186.o differ
diff --git a/.theos/obj/armv7s/AirplaneSignal.dylib b/.theos/obj/armv7s/AirplaneSignal.dylib
index 45b9427..b01233d 100755
Binary files a/.theos/obj/armv7s/AirplaneSignal.dylib and b/.theos/obj/armv7s/AirplaneSignal.dylib differ
diff --git a/.theos/obj/armv7s/Tweak.xm.a29c2cef.o b/.theos/obj/armv7s/Tweak.xm.a29c2cef.o
deleted file mode 100644
index dee28e1..0000000
Binary files a/.theos/obj/armv7s/Tweak.xm.a29c2cef.o and /dev/null differ
diff --git a/.theos/obj/armv7s/Tweak.xm.e23d6086.o b/.theos/obj/armv7s/Tweak.xm.e23d6086.o
new file mode 100644
index 0000000..63a19f2
Binary files /dev/null and b/.theos/obj/armv7s/Tweak.xm.e23d6086.o differ
diff --git a/.theos/packages/com.joemerlino.airplanesignal-0.0.1 b/.theos/packages/com.joemerlino.airplanesignal-0.0.1
index d8263ee..bf0d87a 100644
--- a/.theos/packages/com.joemerlino.airplanesignal-0.0.1
+++ b/.theos/packages/com.joemerlino.airplanesignal-0.0.1
@@ -1 +1 @@
-2
\ No newline at end of file
+4
\ No newline at end of file
diff --git a/Makefile b/Makefile
index 8c4a271..a8eb72a 100644
--- a/Makefile
+++ b/Makefile
@@ -1,3 +1,8 @@
+TARGET := iphone:clang
+SDKVERSION = 8.4
+TARGET_IPHONEOS_DEPLOYMENT_VERSION = 7.0
+ARCHS = armv7 armv7s arm64
+
include theos/makefiles/common.mk
TWEAK_NAME = AirplaneSignal
diff --git a/Tweak.xm b/Tweak.xm
index e6a6c69..ca89aab 100644
--- a/Tweak.xm
+++ b/Tweak.xm
@@ -1,118 +1,256 @@
#import "FSSwitchPanel.h"
#import
+#define AS_DEFAULT_ENABLED YES
+#define AS_DEFAULT_PERCENTAGE 2
+#define AS_DEFAULT_DELAY 5
+#define AS_DEFAULT_CHECK NO
+#define AS_DEFAULT_CHECKMIN 300
+#define AS_DEFAULT_FORCE_WIFI NO
+#define AS_DEFAULT_DOWNGRADE_NETWORK NO
+#define AS_SETTINGS_DOMAIN CFSTR("com.joemerlino.airplanesignal")
+#define AS_3G_SWITCH_ID "com.a3tweaks.switch.3g"
+#define AS_LTE_SWITCH_ID "com.a3tweaks.switch.lte"
+#ifndef kCFCoreFoundationVersionNumber_iOS_8_0
+ #define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15
+#endif
+
+typedef void(^cancel_block_t)(void);
+typedef enum {
+ ASNetworkSpeedSlow = 0,
+ ASNetworkSpeedFast = 1,
+} ASNetworkSpeed;
+
static BOOL call = NO;
-static int percentage = 2;
-static BOOL enabled = YES;
+static int percentage = AS_DEFAULT_PERCENTAGE;
+static BOOL enabled = AS_DEFAULT_ENABLED;
static int bars = 0;
+static int lastTriggerBars = INT_MAX;
+static cancel_block_t cancelBlock = NULL;
static BOOL wifi = NO;
static BOOL bluetooth = NO;
-static int delay = 5;
-static BOOL check = NO;
-static int checkmin = 300;
-static BOOL forcewifi = NO;
+static int delay = AS_DEFAULT_DELAY;
+static BOOL check = AS_DEFAULT_CHECK;
+static int checkmin = AS_DEFAULT_CHECKMIN;
+static BOOL forcewifi = AS_DEFAULT_FORCE_WIFI;
+static BOOL tryDownGradeNetworkSpeed = AS_DEFAULT_DOWNGRADE_NETWORK;
+static BOOL didDowngradeNetworkSpeed = NO;
+static BOOL disabledWhileNetworkChange = NO;
+static BOOL disableNetworkChange = NO;
-#ifndef kCFCoreFoundationVersionNumber_iOS_8_0
- #define kCFCoreFoundationVersionNumber_iOS_8_0 1129.15
-#endif
+@interface ASFlipSwitchNotificationHelper : NSObject
++ (void)startListeningForNotifications;
+@end
-#define setin_domain CFSTR("com.joemerlino.airplanesignal")
+@implementation ASFlipSwitchNotificationHelper
-%hook SBTelephonyManager
++ (void)startListeningForNotifications {
+ static dispatch_once_t onceToken;
+ static ASFlipSwitchNotificationHelper* instance;
+ dispatch_once(&onceToken, ^{
+ instance = [[self alloc] init];
+ });
+}
-%group OS7Hooks
-- (int)signalStrengthBars{
- bars = %orig;
+- (instancetype)init {
+ if((self = [super init])){
+ [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(flipSwitchChanged:) name:FSSwitchPanelSwitchStateChangedNotification object:nil];
+ }
+ return self;
+}
+
+- (void)flipSwitchChanged:(NSNotification *)notification {
+ NSString* switchID = [[[notification userInfo] valueForKey:FSSwitchPanelSwitchIdentifierKey] retain];
+ if(switchID != nil && ([@AS_3G_SWITCH_ID isEqualToString:switchID] || [@AS_LTE_SWITCH_ID isEqualToString:switchID])) {
+ if(!disabledWhileNetworkChange && didDowngradeNetworkSpeed && canDowngradeNetworkSpeed()){
+ //user enabled 3G/LTE after we disabled it.
+ NSLog(@"[AirplaneSignal] user did enable 3G/LTE after we disabled!");
+ didDowngradeNetworkSpeed = NO;
+ }
+ }
+ [switchID release];
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self name:FSSwitchPanelSwitchStateChangedNotification object:nil];
+ [super dealloc];
+}
+
+@end
+
+cancel_block_t create_and_run_cancelable_dispatch_after_block(dispatch_time_t when, dispatch_queue_t queue, dispatch_block_t block) {
+ if(!block) {
+ return NULL;
+ }
+ __block BOOL canceled = NO;
+ cancel_block_t cancel_block = [^{
+ canceled = YES;
+ } copy];
+ if(!queue){
+ queue = dispatch_get_main_queue();
+ }
+ dispatch_after(when, queue, ^{
+ if(!canceled) {
+ block();
+ }
+ });
+ return [cancel_block retain];
+}
+
+static BOOL canDowngradeNetworkSpeed() {
+ return ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@AS_LTE_SWITCH_ID] == FSSwitchStateOn) || ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@AS_3G_SWITCH_ID] == FSSwitchStateOn);
+}
+
+static BOOL setNetworkSpeed(ASNetworkSpeed speed) {
+ BOOL changed = NO;
+ disabledWhileNetworkChange = YES;
+ if(!call){
+ if(speed == ASNetworkSpeedFast) {
+ NSLog(@"[AirplaneSignal] Try to upgrade network speed.");
+ }
+ //new Phones with LTE
+ if ((![[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@AS_LTE_SWITCH_ID]) == speed) {
+ [[FSSwitchPanel sharedPanel] setState:(FSSwitchState)speed forSwitchIdentifier:@AS_LTE_SWITCH_ID];
+ changed = YES;
+ }
+ //old Phones without LTE
+ if ((![[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@AS_3G_SWITCH_ID]) == speed) {
+ [[FSSwitchPanel sharedPanel] setState:(FSSwitchState)speed forSwitchIdentifier:@AS_3G_SWITCH_ID];
+ changed = YES;
+ }
+ if(changed){
+ disableNetworkChange = YES;
+ //15 seconds, so it has time to switch to other Network (In that period iOS always returns only 1 bar)
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
+ disabledWhileNetworkChange = NO;
+ });
+ //dont get in a loop of nonstop down an upgrading, wait for some time
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, checkmin * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
+ disableNetworkChange = NO;
+ });
+ return !speed;
+ }
+ }
+ disabledWhileNetworkChange = NO;
+ return NO;
+}
+
+static void handleSignalStrengthUpdate(){
NSLog(@"[AirplaneSignal] P: %d BARS: %d CALL: %d", percentage, bars, call);
- if(enabled && percentage>=bars){
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
- NSLog(@"[AirplaneSignal] P: %d BARS: %d CALL: %d", percentage, bars, call);
- if(!call && percentage>=bars && [[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == 0){
- if ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.wifi"] == 1)
- wifi = YES;
- else wifi = NO;
- if ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"] == 1)
- bluetooth = YES;
- else bluetooth = NO;
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
- AudioServicesPlaySystemSound(1352);
- NSLog(@"[AirplaneSignal] AIRPLANEMODE ON, WIFI %d, BT %d",wifi, bluetooth);
- if(wifi || forcewifi)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.wifi"];
- if(bluetooth)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"];
- if(check){
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, checkmin * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
- if([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == 1)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOff forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
+ if(enabled && !disabledWhileNetworkChange){
+ if(percentage>=bars){
+ if(lastTriggerBars>=bars){
+ if(!cancelBlock){
+ NSLog(@"[AirplaneSignal] queueing block");
+ cancelBlock = create_and_run_cancelable_dispatch_after_block(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
+ NSLog(@"[AirplaneSignal] executing queued block");
+ NSLog(@"[AirplaneSignal] P: %d BARS: %d CALL: %d", percentage, bars, call);
+ //recheck bars nevertheless
+ if(percentage>=bars) {
+ if(tryDownGradeNetworkSpeed && !disableNetworkChange && !didDowngradeNetworkSpeed && canDowngradeNetworkSpeed()) {
+ didDowngradeNetworkSpeed = setNetworkSpeed(ASNetworkSpeedSlow);
+ NSLog(@"[AirplaneSignal] Could downgrade network speed: %d", didDowngradeNetworkSpeed);
+ if(didDowngradeNetworkSpeed) {
+ AudioServicesPlaySystemSound(1352);
+ }
+ } else if(!call){
+ BOOL tryToRestoreNetworkSpeed = didDowngradeNetworkSpeed;
+ if([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == 0){
+ wifi = [[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.wifi"] == FSSwitchStateOn;
+ bluetooth = [[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"] == FSSwitchStateOn;
+ [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
+ AudioServicesPlaySystemSound(1352);
+ NSLog(@"[AirplaneSignal] AIRPLANEMODE ON, WIFI %d, BT %d",wifi, bluetooth);
+ if(wifi || forcewifi)
+ [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.wifi"];
+ if(bluetooth)
+ [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"];
+ if(check){
+ BOOL tryToRestoreNetworkSpeedBlock = tryToRestoreNetworkSpeed;
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, checkmin * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
+ if([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == FSSwitchStateOn)
+ [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOff forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
+ if(tryToRestoreNetworkSpeedBlock && !disableNetworkChange){
+ didDowngradeNetworkSpeed = setNetworkSpeed(ASNetworkSpeedFast);
+ }
+ });
+ }
+ tryToRestoreNetworkSpeed = NO;
+ }
+ if(tryToRestoreNetworkSpeed && !disableNetworkChange){
+ didDowngradeNetworkSpeed = setNetworkSpeed(ASNetworkSpeedFast);
+ }
+ }
+ }
+ [cancelBlock release];
+ cancelBlock = NULL;
});
}
+ goto returnLabel;
+ }
+ }
+ if(cancelBlock) {
+ //Signal strength got better
+ NSLog(@"[AirplaneSignal] cancel queued block");
+ cancelBlock();
+ [cancelBlock release];
+ cancelBlock = NULL;
+ if(didDowngradeNetworkSpeed && !disableNetworkChange) {
+ didDowngradeNetworkSpeed = setNetworkSpeed(ASNetworkSpeedFast);
}
- });
- }
- return %orig;
+ }
+ returnLabel:
+ lastTriggerBars = bars;
+ }
+}
+
+%hook SBTelephonyManager
+
+%group OS7Hooks
+- (int)signalStrengthBars{
+ bars = %orig;
+ handleSignalStrengthUpdate();
+ return bars;
}
-(_Bool)inCall{
- NSLog(@"INCALL %d",%orig);
call=%orig;
- return %orig;
+ NSLog(@"INCALL %d",call);
+ return (_Bool)call;
}
%end
%group OS8Hooks
-(BOOL)inCall{
call = %orig;
- return %orig;
+ NSLog(@"INCALL %d",call);
+ return call;
}
-(long)signalStrengthBars{
bars = %orig;
- NSLog(@"[AirplaneSignal] P: %d BARS: %d CALL: %d", percentage, bars, call);
- if(enabled && percentage>=bars){
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, delay * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
- NSLog(@"[AirplaneSignal] P: %d BARS: %d CALL: %d", percentage, bars, call);
- if(!call && percentage>=bars && [[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == 0){
- if ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.wifi"] == 1)
- wifi = YES;
- else wifi = NO;
- if ([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"] == 1)
- bluetooth = YES;
- else bluetooth = NO;
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
- AudioServicesPlaySystemSound(1352);
- NSLog(@"[AirplaneSignal] AIRPLANEMODE ON, WIFI %d, BT %d",wifi, bluetooth);
- if(wifi || forcewifi)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.wifi"];
- if(bluetooth)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOn forSwitchIdentifier:@"com.a3tweaks.switch.bluetooth"];
- if(check){
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, checkmin * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
- if([[FSSwitchPanel sharedPanel] stateForSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"] == 1)
- [[FSSwitchPanel sharedPanel] setState:FSSwitchStateOff forSwitchIdentifier:@"com.a3tweaks.switch.airplane-mode"];
- });
- }
- }
- });
- }
- return %orig;
+ handleSignalStrengthUpdate();
+ return bars;
}
%end
%end
+
static void LoadSettings(){
CFPreferencesAppSynchronize(CFSTR("com.joemerlino.airplanesignal"));
- NSString *n = (NSString*)CFPreferencesCopyAppValue(CFSTR("enabled"), setin_domain);
- enabled = (n) ? [n boolValue]:YES;
- NSString *n2 = (NSString*)CFPreferencesCopyAppValue(CFSTR("percentage"), setin_domain);
- percentage = [n2 intValue];
- NSString *n3 = (NSString*)CFPreferencesCopyAppValue(CFSTR("delay"), setin_domain);
- delay = [n3 intValue];
- NSString *n4 = (NSString*)CFPreferencesCopyAppValue(CFSTR("check"), setin_domain);
- check = (n4) ? [n4 boolValue]:NO;
- NSString *n5 = (NSString*)CFPreferencesCopyAppValue(CFSTR("checkmin"), setin_domain);
- checkmin = [n5 intValue];
- NSString *n6 = (NSString*)CFPreferencesCopyAppValue(CFSTR("forcewifi"), setin_domain);
- forcewifi = (n6) ? [n6 boolValue]:NO;
+ NSNumber *n = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("enabled"), AS_SETTINGS_DOMAIN);
+ enabled = (n) ? [n boolValue]:AS_DEFAULT_ENABLED;
+ NSNumber *n2 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("percentage"), AS_SETTINGS_DOMAIN);
+ percentage = (n2) ? [n2 intValue]:AS_DEFAULT_PERCENTAGE;
+ NSNumber *n3 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("delay"), AS_SETTINGS_DOMAIN);
+ delay = (n3) ? [n3 intValue]:AS_DEFAULT_DELAY;
+ NSNumber *n4 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("check"), AS_SETTINGS_DOMAIN);
+ check = (n4) ? [n4 boolValue]:AS_DEFAULT_CHECK;
+ NSNumber *n5 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("checkmin"), AS_SETTINGS_DOMAIN);
+ checkmin = (n5) ? [n5 intValue]:AS_DEFAULT_CHECKMIN;
+ NSNumber *n6 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("forcewifi"), AS_SETTINGS_DOMAIN);
+ forcewifi = (n6) ? [n6 boolValue]:AS_DEFAULT_FORCE_WIFI;
+ NSNumber *n7 = (NSNumber*)CFPreferencesCopyAppValue(CFSTR("downgradenetwork"), AS_SETTINGS_DOMAIN);
+ tryDownGradeNetworkSpeed = (n7) ? [n7 boolValue]:AS_DEFAULT_DOWNGRADE_NETWORK;
NSLog(@"[AirplaneSignal] ENABLED AIRPLANESIGNAL: %d PERCENTAGE %d", enabled, percentage);
}
@@ -120,6 +258,7 @@ static void LoadSettings(){
{
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(), NULL, (CFNotificationCallback)LoadSettings, CFSTR("com.joemerlino.airplanesignal.preferencechanged"), NULL, CFNotificationSuspensionBehaviorCoalesce);
LoadSettings();
+ [ASFlipSwitchNotificationHelper startListeningForNotifications];
if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_8_0)
%init(OS8Hooks);
else
diff --git a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs b/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs
index a12b7c7..53dc64f 100755
Binary files a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs and b/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs differ
diff --git a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist b/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist
index 74f5214..407d40a 100644
--- a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist
+++ b/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs.plist
@@ -170,6 +170,26 @@
3000
+
+ cell
+ PSGroupCell
+ footerText
+ This feature allows to "force downgrade" network speed (LTE -> 3G [or 3G -> EDGE on older iDevices]) before enabling airplane mode, since signal strength might be better on slower network.
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ downgradenetwork
+ label
+ Downgrade network speed
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
cell
PSGroupCell
diff --git a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png b/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png
deleted file mode 100644
index 42daad8..0000000
Binary files a/airplanesignalprefs/.theos/obj/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs@2x.png and /dev/null differ
diff --git a/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs b/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs
index e450c3b..57a0c39 100755
Binary files a/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs and b/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs differ
diff --git a/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.c366b8e0.o b/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.f13eeb8a.o
similarity index 99%
rename from airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.c366b8e0.o
rename to airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.f13eeb8a.o
index 2b28698..40d503d 100644
Binary files a/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.c366b8e0.o and b/airplanesignalprefs/.theos/obj/arm64/AirplaneSignalPrefs.mm.f13eeb8a.o differ
diff --git a/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs b/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs
index c4a0832..a198913 100755
Binary files a/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs and b/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs differ
diff --git a/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.1241849b.o b/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.1241849b.o
deleted file mode 100644
index 21f68ab..0000000
Binary files a/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.1241849b.o and /dev/null differ
diff --git a/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.2b538da1.o b/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.2b538da1.o
new file mode 100644
index 0000000..34d5068
Binary files /dev/null and b/airplanesignalprefs/.theos/obj/armv7/AirplaneSignalPrefs.mm.2b538da1.o differ
diff --git a/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs b/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs
index 2844387..2720c60 100755
Binary files a/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs and b/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.bundle/AirplaneSignalPrefs differ
diff --git a/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d1bc5acf.o b/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d1bc5acf.o
deleted file mode 100644
index 4aeb397..0000000
Binary files a/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d1bc5acf.o and /dev/null differ
diff --git a/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d39eb57c.o b/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d39eb57c.o
new file mode 100644
index 0000000..90ff388
Binary files /dev/null and b/airplanesignalprefs/.theos/obj/armv7s/AirplaneSignalPrefs.mm.d39eb57c.o differ
diff --git a/airplanesignalprefs/Makefile b/airplanesignalprefs/Makefile
index 577a2b9..73eec00 100644
--- a/airplanesignalprefs/Makefile
+++ b/airplanesignalprefs/Makefile
@@ -1,3 +1,8 @@
+TARGET := iphone:clang
+SDKVERSION = 8.4
+TARGET_IPHONEOS_DEPLOYMENT_VERSION = 7.0
+ARCHS = armv7 armv7s arm64
+
include theos/makefiles/common.mk
BUNDLE_NAME = AirplaneSignalPrefs
diff --git a/airplanesignalprefs/Resources/AirplaneSignalPrefs.plist b/airplanesignalprefs/Resources/AirplaneSignalPrefs.plist
index 74f5214..407d40a 100644
--- a/airplanesignalprefs/Resources/AirplaneSignalPrefs.plist
+++ b/airplanesignalprefs/Resources/AirplaneSignalPrefs.plist
@@ -170,6 +170,26 @@
3000
+
+ cell
+ PSGroupCell
+ footerText
+ This feature allows to "force downgrade" network speed (LTE -> 3G [or 3G -> EDGE on older iDevices]) before enabling airplane mode, since signal strength might be better on slower network.
+
+
+ cell
+ PSSwitchCell
+ default
+
+ defaults
+ com.joemerlino.airplanesignal
+ key
+ downgradenetwork
+ label
+ Downgrade network speed
+ PostNotification
+ com.joemerlino.airplanesignal.preferencechanged
+
cell
PSGroupCell
diff --git a/airplanesignaltoggle/.theos/obj/AirplaneSignalToggle.bundle/AirplaneSignalToggle b/airplanesignaltoggle/.theos/obj/AirplaneSignalToggle.bundle/AirplaneSignalToggle
index 27b5356..b391477 100755
Binary files a/airplanesignaltoggle/.theos/obj/AirplaneSignalToggle.bundle/AirplaneSignalToggle and b/airplanesignaltoggle/.theos/obj/AirplaneSignalToggle.bundle/AirplaneSignalToggle differ
diff --git a/airplanesignaltoggle/.theos/obj/arm64/AirplaneSignalToggle.bundle/AirplaneSignalToggle b/airplanesignaltoggle/.theos/obj/arm64/AirplaneSignalToggle.bundle/AirplaneSignalToggle
index 9030094..71b6ddb 100755
Binary files a/airplanesignaltoggle/.theos/obj/arm64/AirplaneSignalToggle.bundle/AirplaneSignalToggle and b/airplanesignaltoggle/.theos/obj/arm64/AirplaneSignalToggle.bundle/AirplaneSignalToggle differ
diff --git a/airplanesignaltoggle/.theos/obj/arm64/Switch.x.cdaed394.o b/airplanesignaltoggle/.theos/obj/arm64/Switch.x.e9ab706b.o
similarity index 99%
rename from airplanesignaltoggle/.theos/obj/arm64/Switch.x.cdaed394.o
rename to airplanesignaltoggle/.theos/obj/arm64/Switch.x.e9ab706b.o
index 0150a4a..41b9c5e 100644
Binary files a/airplanesignaltoggle/.theos/obj/arm64/Switch.x.cdaed394.o and b/airplanesignaltoggle/.theos/obj/arm64/Switch.x.e9ab706b.o differ
diff --git a/airplanesignaltoggle/.theos/obj/armv7/AirplaneSignalToggle.bundle/AirplaneSignalToggle b/airplanesignaltoggle/.theos/obj/armv7/AirplaneSignalToggle.bundle/AirplaneSignalToggle
index 2391111..3405a7d 100755
Binary files a/airplanesignaltoggle/.theos/obj/armv7/AirplaneSignalToggle.bundle/AirplaneSignalToggle and b/airplanesignaltoggle/.theos/obj/armv7/AirplaneSignalToggle.bundle/AirplaneSignalToggle differ
diff --git a/airplanesignaltoggle/.theos/obj/armv7/Switch.x.0b1e2b5c.o b/airplanesignaltoggle/.theos/obj/armv7/Switch.x.0b1e2b5c.o
deleted file mode 100644
index 7537a59..0000000
Binary files a/airplanesignaltoggle/.theos/obj/armv7/Switch.x.0b1e2b5c.o and /dev/null differ
diff --git a/airplanesignaltoggle/.theos/obj/armv7/Switch.x.7ebfd186.o b/airplanesignaltoggle/.theos/obj/armv7/Switch.x.7ebfd186.o
new file mode 100644
index 0000000..843ae2e
Binary files /dev/null and b/airplanesignaltoggle/.theos/obj/armv7/Switch.x.7ebfd186.o differ
diff --git a/airplanesignaltoggle/.theos/obj/armv7s/AirplaneSignalToggle.bundle/AirplaneSignalToggle b/airplanesignaltoggle/.theos/obj/armv7s/AirplaneSignalToggle.bundle/AirplaneSignalToggle
index 629f57f..3afa02a 100755
Binary files a/airplanesignaltoggle/.theos/obj/armv7s/AirplaneSignalToggle.bundle/AirplaneSignalToggle and b/airplanesignaltoggle/.theos/obj/armv7s/AirplaneSignalToggle.bundle/AirplaneSignalToggle differ
diff --git a/airplanesignaltoggle/.theos/obj/armv7s/Switch.x.a29c2cef.o b/airplanesignaltoggle/.theos/obj/armv7s/Switch.x.e23d6086.o
similarity index 86%
rename from airplanesignaltoggle/.theos/obj/armv7s/Switch.x.a29c2cef.o
rename to airplanesignaltoggle/.theos/obj/armv7s/Switch.x.e23d6086.o
index 73c91ff..fb4a8bb 100644
Binary files a/airplanesignaltoggle/.theos/obj/armv7s/Switch.x.a29c2cef.o and b/airplanesignaltoggle/.theos/obj/armv7s/Switch.x.e23d6086.o differ
diff --git a/airplanesignaltoggle/Makefile b/airplanesignaltoggle/Makefile
index 7679b64..5dd65b5 100755
--- a/airplanesignaltoggle/Makefile
+++ b/airplanesignaltoggle/Makefile
@@ -1,3 +1,8 @@
+TARGET := iphone:clang
+SDKVERSION = 8.4
+TARGET_IPHONEOS_DEPLOYMENT_VERSION = 7.0
+ARCHS = armv7 armv7s arm64
+
include theos/makefiles/common.mk
BUNDLE_NAME = AirplaneSignalToggle
diff --git a/com.joemerlino.airplanesignal_0.0.1-4_iphoneos-arm.deb b/com.joemerlino.airplanesignal_0.0.1-4_iphoneos-arm.deb
new file mode 100644
index 0000000..5553c6a
Binary files /dev/null and b/com.joemerlino.airplanesignal_0.0.1-4_iphoneos-arm.deb differ