You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
157 lines
6.3 KiB
Objective-C
157 lines
6.3 KiB
Objective-C
/*
|
|
Licensed to the Apache Software Foundation (ASF) under one
|
|
or more contributor license agreements. See the NOTICE file
|
|
distributed with this work for additional information
|
|
regarding copyright ownership. The ASF licenses this file
|
|
to you under the Apache License, Version 2.0 (the
|
|
"License"); you may not use this file except in compliance
|
|
with the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing,
|
|
software distributed under the License is distributed on an
|
|
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
KIND, either express or implied. See the License for the
|
|
specific language governing permissions and limitations
|
|
under the License.
|
|
*/
|
|
#import <CoreTelephony/CTTelephonyNetworkInfo.h>
|
|
|
|
#import "CDVConnection.h"
|
|
#import "CDVReachability.h"
|
|
|
|
@interface CDVConnection (PrivateMethods)
|
|
- (void)updateOnlineStatus;
|
|
- (void)sendPluginResult;
|
|
@end
|
|
|
|
@implementation CDVConnection
|
|
|
|
@synthesize connectionType, internetReach;
|
|
|
|
- (void)getConnectionInfo:(CDVInvokedUrlCommand*)command
|
|
{
|
|
_callbackId = command.callbackId;
|
|
[self sendPluginResult];
|
|
}
|
|
|
|
- (void)sendPluginResult
|
|
{
|
|
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK messageAsString:self.connectionType];
|
|
|
|
[result setKeepCallbackAsBool:YES];
|
|
[self.commandDelegate sendPluginResult:result callbackId:_callbackId];
|
|
}
|
|
|
|
- (NSString*)w3cConnectionTypeFor:(CDVReachability*)reachability
|
|
{
|
|
NetworkStatus networkStatus = [reachability currentReachabilityStatus];
|
|
|
|
switch (networkStatus) {
|
|
case NotReachable:
|
|
return @"none";
|
|
|
|
case ReachableViaWWAN:
|
|
{
|
|
BOOL isConnectionRequired = [reachability connectionRequired];
|
|
if (isConnectionRequired) {
|
|
return @"none";
|
|
} else {
|
|
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending) {
|
|
CTTelephonyNetworkInfo *telephonyInfo = [CTTelephonyNetworkInfo new];
|
|
if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]) {
|
|
return @"2g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) {
|
|
return @"2g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMA1x]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORev0]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevA]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyCDMAEVDORevB]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) {
|
|
return @"3g";
|
|
} else if ([telephonyInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyLTE]) {
|
|
return @"4g";
|
|
}
|
|
}
|
|
return @"cellular";
|
|
}
|
|
}
|
|
case ReachableViaWiFi:
|
|
return @"wifi";
|
|
|
|
default:
|
|
return @"unknown";
|
|
}
|
|
}
|
|
|
|
- (BOOL)isCellularConnection:(NSString*)theConnectionType
|
|
{
|
|
return [theConnectionType isEqualToString:@"2g"] ||
|
|
[theConnectionType isEqualToString:@"3g"] ||
|
|
[theConnectionType isEqualToString:@"4g"] ||
|
|
[theConnectionType isEqualToString:@"cellular"];
|
|
}
|
|
|
|
- (void)updateReachability:(CDVReachability*)reachability
|
|
{
|
|
if (reachability) {
|
|
// check whether the connection type has changed
|
|
NSString* newConnectionType = [self w3cConnectionTypeFor:reachability];
|
|
if ([newConnectionType isEqualToString:self.connectionType]) { // the same as before, remove dupes
|
|
return;
|
|
} else {
|
|
self.connectionType = [self w3cConnectionTypeFor:reachability];
|
|
}
|
|
}
|
|
[self sendPluginResult];
|
|
}
|
|
|
|
- (void)updateConnectionType:(NSNotification*)note
|
|
{
|
|
CDVReachability* curReach = [note object];
|
|
|
|
if ((curReach != nil) && [curReach isKindOfClass:[CDVReachability class]]) {
|
|
[self updateReachability:curReach];
|
|
}
|
|
}
|
|
|
|
- (void)onPause
|
|
{
|
|
[self.internetReach stopNotifier];
|
|
}
|
|
|
|
- (void)onResume
|
|
{
|
|
[self.internetReach startNotifier];
|
|
[self updateReachability:self.internetReach];
|
|
}
|
|
|
|
- (void)pluginInitialize
|
|
{
|
|
self.connectionType = @"none";
|
|
self.internetReach = [CDVReachability reachabilityForInternetConnection];
|
|
self.connectionType = [self w3cConnectionTypeFor:self.internetReach];
|
|
[self.internetReach startNotifier];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
|
|
name:kReachabilityChangedNotification object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateConnectionType:)
|
|
name:CTRadioAccessTechnologyDidChangeNotification object:nil];
|
|
if (UIApplicationDidEnterBackgroundNotification && UIApplicationWillEnterForegroundNotification) {
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onPause) name:UIApplicationDidEnterBackgroundNotification object:nil];
|
|
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(onResume) name:UIApplicationWillEnterForegroundNotification object:nil];
|
|
}
|
|
}
|
|
|
|
@end
|