This app provides monitoring and information features for the common freifunk user and the technical stuff of a freifunk community.
Code base is taken from a TUM Practical Course project and added here to see if Freifunk Altdorf can use it.
https://www.freifunk-altdorf.de
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.2 KiB
124 lines
3.2 KiB
/** |
|
* Copyright (c) 2015-present, Facebook, Inc. |
|
* |
|
* This source code is licensed under the MIT license found in the |
|
* LICENSE file in the root directory of this source tree. |
|
*/ |
|
|
|
#import "RCTAppState.h" |
|
|
|
#import "RCTAssert.h" |
|
#import "RCTBridge.h" |
|
#import "RCTEventDispatcher.h" |
|
#import "RCTUtils.h" |
|
|
|
static NSString *RCTCurrentAppBackgroundState() |
|
{ |
|
static NSDictionary *states; |
|
static dispatch_once_t onceToken; |
|
dispatch_once(&onceToken, ^{ |
|
states = @{ |
|
@(UIApplicationStateActive): @"active", |
|
@(UIApplicationStateBackground): @"background" |
|
}; |
|
}); |
|
|
|
if (RCTRunningInAppExtension()) { |
|
return @"extension"; |
|
} |
|
|
|
return states[@(RCTSharedApplication().applicationState)] ?: @"unknown"; |
|
} |
|
|
|
@implementation RCTAppState |
|
{ |
|
NSString *_lastKnownState; |
|
} |
|
|
|
RCT_EXPORT_MODULE() |
|
|
|
+ (BOOL)requiresMainQueueSetup |
|
{ |
|
return YES; |
|
} |
|
|
|
- (dispatch_queue_t)methodQueue |
|
{ |
|
return dispatch_get_main_queue(); |
|
} |
|
|
|
- (NSDictionary *)constantsToExport |
|
{ |
|
return @{@"initialAppState": RCTCurrentAppBackgroundState()}; |
|
} |
|
|
|
#pragma mark - Lifecycle |
|
|
|
- (NSArray<NSString *> *)supportedEvents |
|
{ |
|
return @[@"appStateDidChange", @"memoryWarning"]; |
|
} |
|
|
|
- (void)startObserving |
|
{ |
|
for (NSString *name in @[UIApplicationDidBecomeActiveNotification, |
|
UIApplicationDidEnterBackgroundNotification, |
|
UIApplicationDidFinishLaunchingNotification, |
|
UIApplicationWillResignActiveNotification, |
|
UIApplicationWillEnterForegroundNotification]) { |
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self |
|
selector:@selector(handleAppStateDidChange:) |
|
name:name |
|
object:nil]; |
|
} |
|
|
|
[[NSNotificationCenter defaultCenter] addObserver:self |
|
selector:@selector(handleMemoryWarning) |
|
name:UIApplicationDidReceiveMemoryWarningNotification |
|
object:nil]; |
|
} |
|
|
|
- (void)stopObserving |
|
{ |
|
[[NSNotificationCenter defaultCenter] removeObserver:self]; |
|
} |
|
|
|
#pragma mark - App Notification Methods |
|
|
|
- (void)handleMemoryWarning |
|
{ |
|
[self sendEventWithName:@"memoryWarning" body:nil]; |
|
} |
|
|
|
- (void)handleAppStateDidChange:(NSNotification *)notification |
|
{ |
|
NSString *newState; |
|
|
|
if ([notification.name isEqualToString:UIApplicationWillResignActiveNotification]) { |
|
newState = @"inactive"; |
|
} else if ([notification.name isEqualToString:UIApplicationWillEnterForegroundNotification]) { |
|
newState = @"background"; |
|
} else { |
|
newState = RCTCurrentAppBackgroundState(); |
|
} |
|
|
|
if (![newState isEqualToString:_lastKnownState]) { |
|
_lastKnownState = newState; |
|
[self sendEventWithName:@"appStateDidChange" |
|
body:@{@"app_state": _lastKnownState}]; |
|
} |
|
} |
|
|
|
#pragma mark - Public API |
|
|
|
/** |
|
* Get the current background/foreground state of the app |
|
*/ |
|
RCT_EXPORT_METHOD(getCurrentAppState:(RCTResponseSenderBlock)callback |
|
error:(__unused RCTResponseSenderBlock)error) |
|
{ |
|
callback(@[@{@"app_state": RCTCurrentAppBackgroundState()}]); |
|
} |
|
|
|
@end
|
|
|