From 45fbb8c56f6f9d23b6eb84d22d4708978ef21220 Mon Sep 17 00:00:00 2001 From: Francis Li Date: Fri, 19 Jan 2024 13:57:11 -0800 Subject: [PATCH] feat: add pedometer data updates --- .../project.pbxproj | 2 + example/ios/CmPedometerExample/Info.plist | 2 + example/src/App.tsx | 99 +++++++++++-------- ios/CmPedometer.mm | 17 +++- ios/CmPedometer.swift | 74 ++++++++++++-- src/index.tsx | 57 ++++++++++- 6 files changed, 199 insertions(+), 52 deletions(-) diff --git a/example/ios/CmPedometerExample.xcodeproj/project.pbxproj b/example/ios/CmPedometerExample.xcodeproj/project.pbxproj index cee5920..6b52df2 100644 --- a/example/ios/CmPedometerExample.xcodeproj/project.pbxproj +++ b/example/ios/CmPedometerExample.xcodeproj/project.pbxproj @@ -466,6 +466,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 2XU846A9M4; ENABLE_BITCODE = NO; INFOPLIST_FILE = CmPedometerExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -493,6 +494,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = 2XU846A9M4; INFOPLIST_FILE = CmPedometerExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/example/ios/CmPedometerExample/Info.plist b/example/ios/CmPedometerExample/Info.plist index 94d30e4..d22f317 100644 --- a/example/ios/CmPedometerExample/Info.plist +++ b/example/ios/CmPedometerExample/Info.plist @@ -45,6 +45,8 @@ UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight + NSMotionUsageDescription + To track your steps. UIViewControllerBasedStatusBarAppearance diff --git a/example/src/App.tsx b/example/src/App.tsx index 847b785..fe8a30c 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -1,6 +1,6 @@ import * as React from 'react'; -import { StyleSheet, View, Text } from 'react-native'; +import { StyleSheet, View, Text, Button } from 'react-native'; import { CMAuthorizationStatus, authorizationStatus, @@ -10,63 +10,80 @@ import { isPaceAvailable, isCadenceAvailable, isPedometerEventTrackingAvailable, + CMPedometerData, + startUpdates, + stopUpdates, } from 'react-native-cm-pedometer'; export default function App() { - const [authorizationStatusResult, setAuthorizationStatusResult] = - React.useState(); - const [isStepCountingAvailableResult, setStepCountingAvailableResult] = - React.useState(); - const [isDistanceAvailableResult, setDistanceAvailableResult] = - React.useState(); - const [isFloorCountingAvailableResult, setFloorCountingAvailableResult] = - React.useState(); - const [isPaceAvailableResult, setPaceAvailableResult] = React.useState< - boolean | undefined + const [status, setStatus] = React.useState< + CMAuthorizationStatus | undefined >(); - const [isCadenceAvailableResult, setCadenceAvailableResult] = React.useState< + const [isStepAvail, setStepAvail] = React.useState(); + const [isDistAvail, setDistAvail] = React.useState(); + const [isFloorAvail, setFloorAvail] = React.useState(); + const [isPaceAvail, setPaceAvail] = React.useState(); + const [isCadenceAvail, setCadenceAvail] = React.useState< boolean | undefined >(); - const [ - isPedometerEventTrackingAvailableResult, - setPedometerEventTrackingAvailableResult, - ] = React.useState(); + const [isEventAvail, setEventAvail] = React.useState(); React.useEffect(() => { - authorizationStatus().then(setAuthorizationStatusResult); - isStepCountingAvailable().then(setStepCountingAvailableResult); - isDistanceAvailable().then(setDistanceAvailableResult); - isFloorCountingAvailable().then(setFloorCountingAvailableResult); - isPaceAvailable().then(setPaceAvailableResult); - isCadenceAvailable().then(setCadenceAvailableResult); - isPedometerEventTrackingAvailable().then( - setPedometerEventTrackingAvailableResult - ); + authorizationStatus().then(setStatus); + isStepCountingAvailable().then(setStepAvail); + isDistanceAvailable().then(setDistAvail); + isFloorCountingAvailable().then(setFloorAvail); + isPaceAvailable().then(setPaceAvail); + isCadenceAvailable().then(setCadenceAvail); + isPedometerEventTrackingAvailable().then(setEventAvail); + return () => { + stopUpdates(); + }; }, []); + const [isDataStarted, setDataStarted] = React.useState(false); + const [data, setData] = React.useState(); + const [error, setError] = React.useState(); + function onPressData() { + if (isDataStarted) { + stopUpdates(); + } else { + startUpdates(new Date(), (newError, newData) => { + setError(newError); + setData(newData); + }); + } + setDataStarted(!isDataStarted); + } + return ( Authorization Status:{' '} - {authorizationStatusResult !== undefined && - CMAuthorizationStatus[authorizationStatusResult]} - - - Is Step Counting Available: {isStepCountingAvailableResult?.toString()} - - - Is Distance Available: {isDistanceAvailableResult?.toString()} - - - Is Floor Counting Available:{' '} - {isFloorCountingAvailableResult?.toString()} + {status !== undefined && CMAuthorizationStatus[status]} - Is Pace Available: {isPaceAvailableResult?.toString()} - Is Cadence Available: {isCadenceAvailableResult?.toString()} + Is Step Counting Available: {isStepAvail?.toString()} + Is Distance Available: {isDistAvail?.toString()} + Is Floor Counting Available: {isFloorAvail?.toString()} + Is Pace Available: {isPaceAvail?.toString()} + Is Cadence Available: {isCadenceAvail?.toString()} - Is Pedometer Event Tracking Available:{' '} - {isPedometerEventTrackingAvailableResult?.toString()} + Is Pedometer Event Tracking Available: {isEventAvail?.toString()} +