UNPKG

1.27 kBJavaScriptView Raw
1// @flow
2
3import { NativeEventEmitter, NativeModules } from 'react-native';
4import invariant from 'invariant';
5
6const PedometerEventEmitter = new NativeEventEmitter(NativeModules.ExponentPedometer);
7
8type PedometerResult = { steps: number };
9type PedometerUpdateCallback = (result: PedometerResult) => void;
10type PedometerListener = { remove: () => void };
11
12let _listenerCount = 0;
13
14export function watchStepCount(callback: PedometerUpdateCallback): PedometerListener {
15 if (_listenerCount === 0) {
16 NativeModules.ExponentPedometer.watchStepCount();
17 }
18 _listenerCount++;
19
20 const listener = PedometerEventEmitter.addListener('Exponent.pedometerUpdate', callback);
21
22 return {
23 remove() {
24 listener.remove();
25 _listenerCount--;
26 if (_listenerCount === 0) {
27 NativeModules.ExponentPedometer.stopWatchingStepCount();
28 }
29 },
30 };
31}
32
33export async function getStepCountAsync(start: Date, end: Date): Promise<PedometerResult> {
34 invariant(start <= end, 'Pedometer: The start date must precede the end date.');
35 return await NativeModules.ExponentPedometer.getStepCountAsync(start.getTime(), end.getTime());
36}
37
38export async function isAvailableAsync(): Promise<boolean> {
39 return await NativeModules.ExponentPedometer.isAvailableAsync();
40}