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.
135 lines
3.8 KiB
135 lines
3.8 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 "RCTStatusBarManager.h" |
|
|
|
#import "RCTEventDispatcher.h" |
|
#import "RCTLog.h" |
|
#import "RCTUtils.h" |
|
|
|
#if !TARGET_OS_TV |
|
@implementation RCTConvert (UIStatusBar) |
|
|
|
RCT_ENUM_CONVERTER(UIStatusBarStyle, (@{ |
|
@"default": @(UIStatusBarStyleDefault), |
|
@"light-content": @(UIStatusBarStyleLightContent), |
|
@"dark-content": @(UIStatusBarStyleDefault), |
|
}), UIStatusBarStyleDefault, integerValue); |
|
|
|
RCT_ENUM_CONVERTER(UIStatusBarAnimation, (@{ |
|
@"none": @(UIStatusBarAnimationNone), |
|
@"fade": @(UIStatusBarAnimationFade), |
|
@"slide": @(UIStatusBarAnimationSlide), |
|
}), UIStatusBarAnimationNone, integerValue); |
|
|
|
@end |
|
#endif |
|
|
|
@implementation RCTStatusBarManager |
|
|
|
static BOOL RCTViewControllerBasedStatusBarAppearance() |
|
{ |
|
static BOOL value; |
|
static dispatch_once_t onceToken; |
|
dispatch_once(&onceToken, ^{ |
|
value = [[[NSBundle mainBundle] objectForInfoDictionaryKey: |
|
@"UIViewControllerBasedStatusBarAppearance"] ?: @YES boolValue]; |
|
}); |
|
|
|
return value; |
|
} |
|
|
|
RCT_EXPORT_MODULE() |
|
|
|
- (NSArray<NSString *> *)supportedEvents |
|
{ |
|
return @[@"statusBarFrameDidChange", |
|
@"statusBarFrameWillChange"]; |
|
} |
|
|
|
#if !TARGET_OS_TV |
|
|
|
- (void)startObserving |
|
{ |
|
NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; |
|
[nc addObserver:self selector:@selector(applicationDidChangeStatusBarFrame:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil]; |
|
[nc addObserver:self selector:@selector(applicationWillChangeStatusBarFrame:) name:UIApplicationWillChangeStatusBarFrameNotification object:nil]; |
|
} |
|
|
|
- (void)stopObserving |
|
{ |
|
[[NSNotificationCenter defaultCenter] removeObserver:self]; |
|
} |
|
|
|
- (dispatch_queue_t)methodQueue |
|
{ |
|
return dispatch_get_main_queue(); |
|
} |
|
|
|
- (void)emitEvent:(NSString *)eventName forNotification:(NSNotification *)notification |
|
{ |
|
CGRect frame = [notification.userInfo[UIApplicationStatusBarFrameUserInfoKey] CGRectValue]; |
|
NSDictionary *event = @{ |
|
@"frame": @{ |
|
@"x": @(frame.origin.x), |
|
@"y": @(frame.origin.y), |
|
@"width": @(frame.size.width), |
|
@"height": @(frame.size.height), |
|
}, |
|
}; |
|
[self sendEventWithName:eventName body:event]; |
|
} |
|
|
|
- (void)applicationDidChangeStatusBarFrame:(NSNotification *)notification |
|
{ |
|
[self emitEvent:@"statusBarFrameDidChange" forNotification:notification]; |
|
} |
|
|
|
- (void)applicationWillChangeStatusBarFrame:(NSNotification *)notification |
|
{ |
|
[self emitEvent:@"statusBarFrameWillChange" forNotification:notification]; |
|
} |
|
|
|
RCT_EXPORT_METHOD(getHeight:(RCTResponseSenderBlock)callback) |
|
{ |
|
callback(@[@{ |
|
@"height": @(RCTSharedApplication().statusBarFrame.size.height), |
|
}]); |
|
} |
|
|
|
RCT_EXPORT_METHOD(setStyle:(UIStatusBarStyle)statusBarStyle |
|
animated:(BOOL)animated) |
|
{ |
|
if (RCTViewControllerBasedStatusBarAppearance()) { |
|
RCTLogError(@"RCTStatusBarManager module requires that the \ |
|
UIViewControllerBasedStatusBarAppearance key in the Info.plist is set to NO"); |
|
} else { |
|
[RCTSharedApplication() setStatusBarStyle:statusBarStyle |
|
animated:animated]; |
|
} |
|
} |
|
|
|
RCT_EXPORT_METHOD(setHidden:(BOOL)hidden |
|
withAnimation:(UIStatusBarAnimation)animation) |
|
{ |
|
if (RCTViewControllerBasedStatusBarAppearance()) { |
|
RCTLogError(@"RCTStatusBarManager module requires that the \ |
|
UIViewControllerBasedStatusBarAppearance key in the Info.plist is set to NO"); |
|
} else { |
|
[RCTSharedApplication() setStatusBarHidden:hidden |
|
withAnimation:animation]; |
|
} |
|
} |
|
|
|
RCT_EXPORT_METHOD(setNetworkActivityIndicatorVisible:(BOOL)visible) |
|
{ |
|
RCTSharedApplication().networkActivityIndicatorVisible = visible; |
|
} |
|
|
|
#endif //TARGET_OS_TV |
|
|
|
@end
|
|
|