Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 29 additions & 30 deletions example/App.tsx
Original file line number Diff line number Diff line change
@@ -1,35 +1,38 @@
import * as MotionActivityTracker from "motion-activity-tracker";
import {
PermissionStatus,
HistoricalActivity,
TrackingStatus,
ActivityType,
ActivityChangeEvent,
TransitionType,
Confidence,
} from "motion-activity-tracker/types";
import React, { useEffect, useState } from "react";
import { Text, View, Button, StyleSheet, Platform } from "react-native";

export default function App() {
const [message, setMessage] = useState("Initializing..."),
[tracking, setTracking] = useState(false),
[data, setData] = useState<
MotionActivityTracker.HistoricalActivity[] | undefined
>(),
[permissionStatus, setPermissionStatus] =
useState<MotionActivityTracker.PermissionStatus>(
MotionActivityTracker.PermissionStatus.NOT_DETERMINED,
),
[trackingStatus, setTrackingStatus] =
useState<MotionActivityTracker.TrackingStatus>(
MotionActivityTracker.TrackingStatus.STOPPED,
),
[enterTransition, setEnterTransition] =
useState<MotionActivityTracker.ActivityType>(
MotionActivityTracker.ActivityType.UNKNOWN,
),
[exitTransition, setExitTransition] =
useState<MotionActivityTracker.ActivityType>(
MotionActivityTracker.ActivityType.UNKNOWN,
),
[data, setData] = useState<HistoricalActivity[] | undefined>(),
[permissionStatus, setPermissionStatus] = useState<PermissionStatus>(
PermissionStatus.NOT_DETERMINED,
),
[trackingStatus, setTrackingStatus] = useState<TrackingStatus>(
TrackingStatus.STOPPED,
),
[enterTransition, setEnterTransition] = useState<ActivityType>(
ActivityType.UNKNOWN,
),
[exitTransition, setExitTransition] = useState<ActivityType>(
ActivityType.UNKNOWN,
),
startDate = new Date(Date.now() - 7 * 24 * 60 * 60 * 1000),
endDate = new Date();

useEffect(() => {
const setActivityHistoricalData = async () => {
const data = await MotionActivityTracker.getHistoricalDataIos(
const data = await MotionActivityTracker.getHistoricalData(
startDate,
endDate,
);
Expand All @@ -51,15 +54,11 @@ export default function App() {
console.log("New Motion State:", payload);

payload.events.forEach((event) => {
if (
event.transitionType === MotionActivityTracker.TransitionType.ENTER
) {
if (event.transitionType === TransitionType.ENTER) {
setEnterTransition(event.activityType);
}

if (
event.transitionType === MotionActivityTracker.TransitionType.EXIT
) {
if (event.transitionType === TransitionType.EXIT) {
setExitTransition(event.activityType);
}
});
Expand Down Expand Up @@ -99,10 +98,10 @@ export default function App() {
};

const handleSimulateTransition = () => {
const event: MotionActivityTracker.ActivityChangeEvent = {
activityType: MotionActivityTracker.ActivityType.WALKING,
transitionType: MotionActivityTracker.TransitionType.ENTER,
confidence: MotionActivityTracker.Confidence.UNKNOWN,
const event: ActivityChangeEvent = {
activityType: ActivityType.WALKING,
transitionType: TransitionType.ENTER,
confidence: Confidence.UNKNOWN,
timestamp: new Date().getTime(),
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import { EventEmitter, Subscription } from "expo-modules-core";
import { PermissionsAndroid, Platform } from "react-native";

import MotionActivityTrackerModule from "./MotionActivityTrackerModule";
import {
PermissionStatus,
ActivityChangeEvent,
TrackingStatus,
HistoricalActivity,
EventPayload,
} from "./MotionActivityTracker.types";
import MotionActivityTrackerModule from "./MotionActivityTrackerModule";
} from "./types";

export const isGooglePlayServicesAvailable: boolean =
MotionActivityTrackerModule.isGooglePlayServicesAvailable ?? false;
Expand Down Expand Up @@ -79,9 +79,17 @@ export function simulateActivityTransition(event: ActivityChangeEvent): void {
);
}

export async function getHistoricalDataIos(
/**
* Get historical motion activity data from the device for iOS.
* Only supported on iOS. On other platforms, it will return a warning and an empty array.
* @param startDate - The start date of the historical data to fetch.
* @param endDate - The end date of the historical data to fetch. Defaults to the current date.
* @returns A promise that resolves to an array of historical motion activity data.
*/

export async function getHistoricalData(
startDate: Date,
endDate: Date,
endDate: Date = new Date(),
): Promise<HistoricalActivity[]> {
const startTimestamp = startDate.getTime(),
endTimestamp = endDate.getTime();
Expand All @@ -93,5 +101,7 @@ export async function getHistoricalDataIos(
);
}

console.warn("getHistoricalData is only supported on iOS");

return [];
}
35 changes: 35 additions & 0 deletions src/MotionActivityTracker.web.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { Platform } from "react-native";

Check warning on line 1 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`

Check warning on line 2 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
function UnavailableFn<T = unknown>(retVal: T) {

Check warning on line 3 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
let hasWarned = false;

Check warning on line 4 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
return () => {

Check warning on line 5 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
if (!hasWarned) {

Check warning on line 6 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
console.warn(

Check warning on line 7 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
`MotionActivityTracker is not available on platform "${Platform.OS}"`,

Check warning on line 8 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
);

Check warning on line 9 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
hasWarned = true;

Check warning on line 10 in src/MotionActivityTracker.web.ts

View workflow job for this annotation

GitHub Actions / test

Delete `␍`
}
return retVal;
};
}

export const getPermissionStatusAsync = UnavailableFn(
Promise.resolve("PLATFORM_NOT_SUPPORTED"),
);

export const isGooglePlayServicesAvailable = UnavailableFn(false);

export const startTracking = UnavailableFn(Promise.resolve("FAILED"));
export const stopTracking = UnavailableFn(Promise.resolve("FAILED"));
export const getHistoricalData = UnavailableFn(Promise.resolve([]));
export const simulateActivityTransition = UnavailableFn(undefined);
export const requestPermissionsAsyncAndroid = UnavailableFn(
Promise.resolve("PLATFORM_NOT_SUPPORTED"),
);

export function addMotionStateChangeListener() {
console.warn(
"Motion state change listeners are not supported on this platform.",
);
return { remove: () => {} };
}
3 changes: 1 addition & 2 deletions src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1 @@
export * from "./MotionActivityTracker";
export * from "./MotionActivityTracker.types";
export * from "./MotionActivityTracker.native";
1 change: 1 addition & 0 deletions src/types/index.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./MotionActivityTracker.types";