Skip to content

Commit 2118d6a

Browse files
authored
Merge pull request #10 from kingstinct/refactor/fallback-and-defaults
Refactor/fallback and defaults
2 parents bf7e8bd + 13c26be commit 2118d6a

File tree

6 files changed

+80
-36
lines changed

6 files changed

+80
-36
lines changed

example/App.tsx

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,38 @@
11
import * as MotionActivityTracker from "motion-activity-tracker";
2+
import {
3+
PermissionStatus,
4+
HistoricalActivity,
5+
TrackingStatus,
6+
ActivityType,
7+
ActivityChangeEvent,
8+
TransitionType,
9+
Confidence,
10+
} from "motion-activity-tracker/types";
211
import React, { useEffect, useState } from "react";
312
import { Text, View, Button, StyleSheet, Platform } from "react-native";
413

514
export default function App() {
615
const [message, setMessage] = useState("Initializing..."),
716
[tracking, setTracking] = useState(false),
8-
[data, setData] = useState<
9-
MotionActivityTracker.HistoricalActivity[] | undefined
10-
>(),
11-
[permissionStatus, setPermissionStatus] =
12-
useState<MotionActivityTracker.PermissionStatus>(
13-
MotionActivityTracker.PermissionStatus.NOT_DETERMINED,
14-
),
15-
[trackingStatus, setTrackingStatus] =
16-
useState<MotionActivityTracker.TrackingStatus>(
17-
MotionActivityTracker.TrackingStatus.STOPPED,
18-
),
19-
[enterTransition, setEnterTransition] =
20-
useState<MotionActivityTracker.ActivityType>(
21-
MotionActivityTracker.ActivityType.UNKNOWN,
22-
),
23-
[exitTransition, setExitTransition] =
24-
useState<MotionActivityTracker.ActivityType>(
25-
MotionActivityTracker.ActivityType.UNKNOWN,
26-
),
17+
[data, setData] = useState<HistoricalActivity[] | undefined>(),
18+
[permissionStatus, setPermissionStatus] = useState<PermissionStatus>(
19+
PermissionStatus.NOT_DETERMINED,
20+
),
21+
[trackingStatus, setTrackingStatus] = useState<TrackingStatus>(
22+
TrackingStatus.STOPPED,
23+
),
24+
[enterTransition, setEnterTransition] = useState<ActivityType>(
25+
ActivityType.UNKNOWN,
26+
),
27+
[exitTransition, setExitTransition] = useState<ActivityType>(
28+
ActivityType.UNKNOWN,
29+
),
2730
startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
2831
endDate = new Date();
2932

3033
useEffect(() => {
3134
const setActivityHistoricalData = async () => {
32-
const data = await MotionActivityTracker.getHistoricalDataIos(
35+
const data = await MotionActivityTracker.getHistoricalData(
3336
startDate,
3437
endDate,
3538
);
@@ -51,15 +54,11 @@ export default function App() {
5154
console.log("New Motion State:", payload);
5255

5356
payload.events.forEach((event) => {
54-
if (
55-
event.transitionType === MotionActivityTracker.TransitionType.ENTER
56-
) {
57+
if (event.transitionType === TransitionType.ENTER) {
5758
setEnterTransition(event.activityType);
5859
}
5960

60-
if (
61-
event.transitionType === MotionActivityTracker.TransitionType.EXIT
62-
) {
61+
if (event.transitionType === TransitionType.EXIT) {
6362
setExitTransition(event.activityType);
6463
}
6564
});
@@ -99,10 +98,10 @@ export default function App() {
9998
};
10099

101100
const handleSimulateTransition = () => {
102-
const event: MotionActivityTracker.ActivityChangeEvent = {
103-
activityType: MotionActivityTracker.ActivityType.WALKING,
104-
transitionType: MotionActivityTracker.TransitionType.ENTER,
105-
confidence: MotionActivityTracker.Confidence.UNKNOWN,
101+
const event: ActivityChangeEvent = {
102+
activityType: ActivityType.WALKING,
103+
transitionType: TransitionType.ENTER,
104+
confidence: Confidence.UNKNOWN,
106105
timestamp: new Date().getTime(),
107106
};
108107

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
import { EventEmitter, Subscription } from "expo-modules-core";
22
import { PermissionsAndroid, Platform } from "react-native";
33

4+
import MotionActivityTrackerModule from "./MotionActivityTrackerModule";
45
import {
56
PermissionStatus,
67
ActivityChangeEvent,
78
TrackingStatus,
89
HistoricalActivity,
910
EventPayload,
10-
} from "./MotionActivityTracker.types";
11-
import MotionActivityTrackerModule from "./MotionActivityTrackerModule";
11+
} from "./types";
1212

1313
export const isGooglePlayServicesAvailable: boolean =
1414
MotionActivityTrackerModule.isGooglePlayServicesAvailable ?? false;
@@ -79,9 +79,17 @@ export function simulateActivityTransition(event: ActivityChangeEvent): void {
7979
);
8080
}
8181

82-
export async function getHistoricalDataIos(
82+
/**
83+
* Get historical motion activity data from the device for iOS.
84+
* Only supported on iOS. On other platforms, it will return a warning and an empty array.
85+
* @param startDate - The start date of the historical data to fetch.
86+
* @param endDate - The end date of the historical data to fetch. Defaults to the current date.
87+
* @returns A promise that resolves to an array of historical motion activity data.
88+
*/
89+
90+
export async function getHistoricalData(
8391
startDate: Date,
84-
endDate: Date,
92+
endDate: Date = new Date(),
8593
): Promise<HistoricalActivity[]> {
8694
const startTimestamp = startDate.getTime(),
8795
endTimestamp = endDate.getTime();
@@ -93,5 +101,7 @@ export async function getHistoricalDataIos(
93101
);
94102
}
95103

104+
console.warn("getHistoricalData is only supported on iOS");
105+
96106
return [];
97107
}

src/MotionActivityTracker.web.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import { Platform } from "react-native";
2+
3+
function UnavailableFn<T = unknown>(retVal: T) {
4+
let hasWarned = false;
5+
return () => {
6+
if (!hasWarned) {
7+
console.warn(
8+
`MotionActivityTracker is not available on platform "${Platform.OS}"`,
9+
);
10+
hasWarned = true;
11+
}
12+
return retVal;
13+
};
14+
}
15+
16+
export const getPermissionStatusAsync = UnavailableFn(
17+
Promise.resolve("PLATFORM_NOT_SUPPORTED"),
18+
);
19+
20+
export const isGooglePlayServicesAvailable = UnavailableFn(false);
21+
22+
export const startTracking = UnavailableFn(Promise.resolve("FAILED"));
23+
export const stopTracking = UnavailableFn(Promise.resolve("FAILED"));
24+
export const getHistoricalData = UnavailableFn(Promise.resolve([]));
25+
export const simulateActivityTransition = UnavailableFn(undefined);
26+
export const requestPermissionsAsyncAndroid = UnavailableFn(
27+
Promise.resolve("PLATFORM_NOT_SUPPORTED"),
28+
);
29+
30+
export function addMotionStateChangeListener() {
31+
console.warn(
32+
"Motion state change listeners are not supported on this platform.",
33+
);
34+
return { remove: () => {} };
35+
}

src/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1 @@
1-
export * from "./MotionActivityTracker";
2-
export * from "./MotionActivityTracker.types";
1+
export * from "./MotionActivityTracker.native";

src/types/index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from "./MotionActivityTracker.types";

0 commit comments

Comments
 (0)