Unverified Commit 5b50d6aa authored by Gant Laborde's avatar Gant Laborde Committed by GitHub

Merge pull request #261 from Naoto-Ida/master

Added iOS/Android support for getting carrier information
parents 098c3791 444f5a73
......@@ -193,7 +193,7 @@ var DeviceInfo = require('react-native-device-info');
| Serial Number | `getSerialNumber()` | `string` | Only supported in Android
| IP Address | `getIPAddress()` | `Promise<string>` | Only supported in Android
| MAC Address | `getMACAddress()` | `Promise<string>` | Only supported in Android
| Carrier | `getCarrier()` | `string` e.g. "SOFTBANK" | | |
Since the device setting for PIN/Fingerprint can be modified while the app is still open, this is available via callback instead of as a constant. To use, pass a callback function to the returned bridge function in your javascript:
```js
......
......@@ -16,12 +16,14 @@
@property (nonatomic) bool isEmulator;
@end
@import CoreTelephony;
@implementation RNDeviceInfo
@synthesize isEmulator;
RCT_EXPORT_MODULE()
+ (BOOL)requiresMainQueueSetup
{
return YES;
......@@ -33,17 +35,17 @@ RCT_EXPORT_MODULE()
struct utsname systemInfo;
uname(&systemInfo);
NSString* deviceId = [NSString stringWithCString:systemInfo.machine
encoding:NSUTF8StringEncoding];
if ([deviceId isEqualToString:@"i386"] || [deviceId isEqualToString:@"x86_64"] ) {
deviceId = [NSString stringWithFormat:@"%s", getenv("SIMULATOR_MODEL_IDENTIFIER")];
self.isEmulator = YES;
} else {
self.isEmulator = NO;
}
return deviceId;
}
......@@ -52,7 +54,7 @@ RCT_EXPORT_MODULE()
static NSDictionary* deviceNamesByCode = nil;
if (!deviceNamesByCode) {
deviceNamesByCode = @{@"iPod1,1" :@"iPod Touch", // (Original)
@"iPod2,1" :@"iPod Touch", // (Second Generation)
@"iPod3,1" :@"iPod Touch", // (Third Generation)
......@@ -152,6 +154,13 @@ RCT_EXPORT_MODULE()
return deviceName;
}
- (NSString *) carrier
{
CTTelephonyNetworkInfo *netinfo = [[CTTelephonyNetworkInfo alloc] init];
CTCarrier *carrier = [netinfo subscriberCellularProvider];
return carrier.carrierName;
}
- (NSString*) userAgent
{
#if TARGET_OS_TV
......@@ -212,6 +221,7 @@ RCT_EXPORT_MODULE()
@"appVersion": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleShortVersionString"] ?: [NSNull null],
@"buildNumber": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"],
@"systemManufacturer": @"Apple",
@"carrier": self.carrier ?: [NSNull null],
@"userAgent": self.userAgent,
@"timezone": self.timezone,
@"isEmulator": @(self.isEmulator),
......
......@@ -111,6 +111,12 @@ public class RNDeviceModule extends ReactContextBaseJavaModule {
p.resolve(macAddress);
}
@ReactMethod
public String getCarrier() {
TelephonyManager telMgr = (TelephonyManager) this.reactContext.getSystemService(Context.TELEPHONY_SERVICE);
return telMgr.getNetworkOperatorName();
}
@Override
public @Nullable Map<String, Object> getConstants() {
HashMap<String, Object> constants = new HashMap<String, Object>();
......@@ -177,6 +183,7 @@ public class RNDeviceModule extends ReactContextBaseJavaModule {
TelephonyManager telMgr = (TelephonyManager) this.reactContext.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
constants.put("phoneNumber", telMgr.getLine1Number());
}
constants.put("carrier", this.getCarrier());
return constants;
}
}
......@@ -29,3 +29,4 @@ export function getIPAddress(): Promise<string>;
export function getMACAddress(): Promise<string>;
export function getPhoneNumber(): string;
export function getAPILevel(): number;
export function getCarrier(): string;
......@@ -5,40 +5,40 @@
var RNDeviceInfo = require('react-native').NativeModules.RNDeviceInfo;
module.exports = {
getUniqueID: function () {
getUniqueID: function() {
return RNDeviceInfo.uniqueId;
},
getInstanceID: function() {
return RNDeviceInfo.instanceId;
},
getSerialNumber: function () {
getSerialNumber: function() {
return RNDeviceInfo.serialNumber;
},
getIPAddress: function () {
getIPAddress: function() {
return RNDeviceInfo.getIpAddress();
},
getMACAddress: function () {
getMACAddress: function() {
return RNDeviceInfo.getMacAddress();
},
getDeviceId: function () {
getDeviceId: function() {
return RNDeviceInfo.deviceId;
},
getManufacturer: function () {
getManufacturer: function() {
return RNDeviceInfo.systemManufacturer;
},
getModel: function () {
getModel: function() {
return RNDeviceInfo.model;
},
getBrand: function () {
getBrand: function() {
return RNDeviceInfo.brand;
},
getSystemName: function () {
getSystemName: function() {
return RNDeviceInfo.systemName;
},
getSystemVersion: function () {
getSystemVersion: function() {
return RNDeviceInfo.systemVersion;
},
getAPILevel: function () {
getAPILevel: function() {
return RNDeviceInfo.apiLevel;
},
getBundleId: function() {
......@@ -51,7 +51,7 @@ module.exports = {
return RNDeviceInfo.appVersion;
},
getReadableVersion: function() {
return RNDeviceInfo.appVersion + "." + RNDeviceInfo.buildNumber;
return RNDeviceInfo.appVersion + '.' + RNDeviceInfo.buildNumber;
},
getDeviceName: function() {
return RNDeviceInfo.deviceName;
......@@ -80,13 +80,16 @@ module.exports = {
isPinOrFingerprintSet: function () {
return RNDeviceInfo.isPinOrFingerprintSet;
},
getFirstInstallTime: function () {
getFirstInstallTime: function() {
return RNDeviceInfo.firstInstallTime;
},
getLastUpdateTime: function () {
getLastUpdateTime: function() {
return RNDeviceInfo.lastUpdateTime;
},
getPhoneNumber: function () {
getPhoneNumber: function() {
return RNDeviceInfo.phoneNumber;
}
},
getCarrier: function() {
return RNDeviceInfo.carrier;
},
};
......@@ -29,4 +29,5 @@ declare module.exports: {
getSerialNumber: () => string,
getIPAddress: () => Promise<string>,
getMACAddress: () => Promise<string>,
getCarrier: () => string,
}
......@@ -26,7 +26,7 @@ namespace RNDeviceInfo
}
private bool IsEmulator(string model)
{
{
Regex rgx = new Regex("(?i:virtual)");
return rgx.IsMatch(model);
}
......@@ -87,7 +87,7 @@ namespace RNDeviceInfo
model = deviceInfo.SystemProductName;
hardwareVersion = deviceInfo.SystemHardwareVersion;
os = deviceInfo.OperatingSystem;
string deviceFamilyVersion = Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamilyVersion;
ulong version2 = ulong.Parse(deviceFamilyVersion);
......@@ -116,6 +116,7 @@ namespace RNDeviceInfo
constants["timezone"] = TimeZoneInfo.Local.Id;
constants["isEmulator"] = IsEmulator(model);
constants["isTablet"] = IsTablet(os);
constants["carrier"] = "not available";
constants["is24Hour"] = is24Hour();
return constants;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment