UNPKG

5.44 kBJavaScriptView Raw
1import { NativeEventEmitter, NativeModules } from 'react-native';
2
3const deviceInfoEmitter = new NativeEventEmitter(NativeModules.RNDeviceInfo);
4
5let batteryCharging = false,
6 batteryLevel = -1,
7 powerState = {};
8
9const _readPowerState = (battery) => {
10 const { level, charging, chargingtime, dischargingtime } = battery;
11
12 return {
13 batteryLevel: level,
14 lowPowerMode: false,
15 batteryState: level === 1 ? 'full' : charging ? 'charging' : 'unplugged',
16 chargingtime,
17 dischargingtime,
18 };
19};
20
21export const getMaxMemorySync = () => {
22 if (window.performance && window.performance.memory) {
23 return window.performance.memory.jsHeapSizeLimit;
24 }
25 return -1;
26};
27
28export const getInstallReferrerSync = () => {
29 return document.referrer;
30};
31
32export const isAirplaneModeSync = () => {
33 return !!navigator.onLine;
34};
35
36export const getUserAgentSync = () => {
37 return window.navigator.userAgent;
38};
39
40export const isLocationEnabledSync = () => {
41 return !!navigator.geolocation;
42};
43
44export const getTotalMemorySync = () => {
45 if (navigator.deviceMemory) {
46 return navigator.deviceMemory * 1000000000;
47 }
48 return -1;
49};
50
51export const getUsedMemorySync = () => {
52 if (window.performance && window.performance.memory) {
53 return window.performance.memory.usedJSHeapSize;
54 }
55 return -1;
56};
57
58const init = () => {
59 if (typeof navigator === 'undefined' || !navigator.getBattery) return;
60
61 navigator.getBattery().then((battery) => {
62 batteryCharging = battery.charging;
63
64 battery.addEventListener('chargingchange', () => {
65 const { charging } = battery;
66
67 batteryCharging = charging;
68 powerState = _readPowerState(battery);
69
70 deviceInfoEmitter.emit('RNDeviceInfo_powerStateDidChange', powerState);
71 });
72
73 battery.addEventListener('levelchange', () => {
74 const { level } = battery;
75
76 batteryLevel = level;
77 powerState = _readPowerState(battery);
78
79 deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelDidChange', level);
80 if (level < 0.2) {
81 deviceInfoEmitter.emit('RNDeviceInfo_batteryLevelIsLow', level);
82 }
83 });
84 });
85};
86
87const getBaseOsSync = () => {
88 const userAgent = window.navigator.userAgent,
89 platform = window.navigator.platform,
90 macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'],
91 windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'],
92 iosPlatforms = ['iPhone', 'iPad', 'iPod'];
93
94 let os = platform;
95
96 if (macosPlatforms.indexOf(platform) !== -1) {
97 os = 'Mac OS';
98 } else if (iosPlatforms.indexOf(platform) !== -1) {
99 os = 'iOS';
100 } else if (windowsPlatforms.indexOf(platform) !== -1) {
101 os = 'Windows';
102 } else if (/Android/.test(userAgent)) {
103 os = 'Android';
104 } else if (!os && /Linux/.test(platform)) {
105 os = 'Linux';
106 }
107
108 return os;
109};
110
111init();
112/**
113 * react-native-web empty polyfill.
114 */
115
116export const getInstallReferrer = async () => {
117 return getInstallReferrerSync();
118};
119
120export const getUserAgent = async () => {
121 return getUserAgentSync();
122};
123
124export const isBatteryCharging = async () => {
125 if (navigator.getBattery) {
126 return navigator.getBattery().then(battery => battery.charging);
127 }
128 return false;
129};
130
131export const isBatteryChargingSync = () => {
132 return batteryCharging;
133};
134
135export const isCameraPresent = async () => {
136 if (navigator.mediaDevices && navigator.mediaDevices.enumerateDevices) {
137 return navigator.mediaDevices.enumerateDevices().then(devices => {
138 return !!devices.find((d) => d.kind === 'videoinput');
139 });
140 }
141 return false;
142};
143
144export const isCameraPresentSync = () => {
145 console.log(
146 '[react-native-device-info] isCameraPresentSync not supported - please use isCameraPresent'
147 );
148 return false;
149};
150
151export const getBatteryLevel = async () => {
152 if (navigator.getBattery) {
153 return navigator.getBattery().then(battery => battery.level);
154 }
155 return -1;
156};
157
158export const getBatteryLevelSync = () => {
159 return batteryLevel;
160};
161
162export const isLocationEnabled = async () => {
163 return isLocationEnabledSync();
164};
165
166export const isAirplaneMode = async () => {
167 return isAirplaneModeSync();
168};
169
170export const getBaseOs = async () => {
171 return getBaseOsSync();
172};
173
174export const getTotalDiskCapacity = async () => {
175 if (navigator.storage && navigator.storage.estimate) {
176 return navigator.storage.estimate().then(({ quota }) => quota)
177 }
178 return -1;
179};
180
181export const getTotalDiskCapacitySync = () => {
182 console.log(
183 '[react-native-device-info] getTotalDiskCapacitySync not supported - please use getTotalDiskCapacity'
184 );
185 return -1;
186};
187
188export const getFreeDiskStorage = async () => {
189 if (navigator.storage && navigator.storage.estimate) {
190 return navigator.storage.estimate().then(({ quota, usage }) => quota - usage)
191 }
192 return -1;
193};
194
195export const getFreeDiskStorageSync = () => {
196 console.log(
197 '[react-native-device-info] getFreeDiskStorageSync not supported - please use getFreeDiskStorage'
198 );
199 return -1;
200};
201
202export const getMaxMemory = async () => {
203 return getMaxMemorySync();
204};
205
206export const getUsedMemory = async () => {
207 return getUsedMemorySync();
208};
209
210export const getTotalMemory = async () => {
211 return getTotalMemorySync();
212};
213
214export const getPowerState = async () => {
215 if (navigator.getBattery) {
216 return navigator.getBattery().then((battery) => _readPowerState(battery))
217 }
218 return {};
219};
220
221export const getPowerStateSync = () => {
222 return powerState;
223};