UNPKG

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