From d845519361c3241e205d54a676476b956ddecd3f Mon Sep 17 00:00:00 2001 From: Aaron Czichon Date: Mon, 20 Mar 2017 21:13:46 +0100 Subject: [PATCH] feat(pedo-meter): add pedometer plugin (#1135) Closes #1104 --- src/index.ts | 3 ++ src/plugins/pedometer.ts | 103 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 src/plugins/pedometer.ts diff --git a/src/index.ts b/src/index.ts index 85b98404..d65bffc6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -98,6 +98,7 @@ import { OneSignal } from './plugins/onesignal'; import { PhotoViewer } from './plugins/photo-viewer'; import { ScreenOrientation } from './plugins/screen-orientation'; import { PayPal } from './plugins/pay-pal'; +import { Pedometer } from './plugins/pedometer'; import { PhotoLibrary } from './plugins/photo-library'; import { PinDialog } from './plugins/pin-dialog'; import { Pinterest } from './plugins/pinterest'; @@ -229,6 +230,7 @@ export * from './plugins/network'; export * from './plugins/nfc'; export * from './plugins/onesignal'; export * from './plugins/pay-pal'; +export * from './plugins/pedometer'; export * from './plugins/photo-library'; export * from './plugins/photo-viewer'; export * from './plugins/pin-dialog'; @@ -361,6 +363,7 @@ window['IonicNative'] = { NavigationBar, Network, PayPal, + Pedometer, PhotoLibrary, NFC, Printer, diff --git a/src/plugins/pedometer.ts b/src/plugins/pedometer.ts new file mode 100644 index 00000000..77088175 --- /dev/null +++ b/src/plugins/pedometer.ts @@ -0,0 +1,103 @@ +import { Plugin, Cordova } from './plugin'; +import { Observable } from 'rxjs/Observable'; + +/** + * Interface of a pedometer data object which is returned by watching for new data or by recieving historical data + */ + +export interface IPedometerData { + startDate?: number; + endDate?: number; + numberOfSteps: number; + distance: number; + floorsAscended: number; + floorsDescended: number; +} + +/** + * @name Pedometer + * @description + * Fetch pedestrian-related pedometer data, + * such as step counts and other information about the distance travelled. + * + * @usage + * ``` + * import { Pedometer } from 'ionic-native'; + * + * Pedometer.isDistanceAvailable() + * .then((available: boolean) => console.log(available)) + * .catch((error: any) => console.log(error)); + * + * Pedometer.startPedometerUpdates() + * .subscribe((data: IPedometerData) => { + * console.log(data); + * }); + * ``` + */ +@Plugin({ + pluginName: 'Pedometer', + plugin: 'cordova-plugin-pedometer', + pluginRef: 'pedometer', + repo: 'https://github.com/leecrossley/cordova-plugin-pedometer', + platforms: ['Android', 'iOS'] +}) +export class Pedometer { + + /** + * Checks if step counting is available. Only works on iOS. + * @return {Promise} Returns a promise that resolves when feature is supported (true) or not supported (false) + */ + @Cordova() + static isStepCountingAvailable(): Promise { return; } + + /** + * Distance estimation indicates the ability to use step information to supply the approximate distance travelled by the user. + * This capability is not supported on all devices, even with iOS 8. + * Only works on iOS. + * @return {Promise} Returns a promise that resolves when feature is supported (true) or not supported (false) + */ + @Cordova() + static isDistanceAvailable(): Promise { return; } + + /** + * Floor counting indicates the ability to count the number of floors the user walks up or down using stairs. + * This capability is not supported on all devices, even with iOS 8. + * Only works on iOS. + * @return {Promise} Returns a promise that resolves when feature is supported (true) or not supported (false) + */ + @Cordova() + static isFloorCountingAvailable(): Promise { return; } + + /** + * Starts the delivery of recent pedestrian-related data to your Cordova app. + * + * When the app is suspended, the delivery of updates stops temporarily. + * Upon returning to foreground or background execution, the pedometer object begins updates again. + * @return {Observable} Returns a Observable that recieves repeatly data from pedometer in background. + */ + @Cordova({ + observable: true, + clearFunction: 'stopPedometerUpdates' + }) + static startPedometerUpdates(): Observable { return; } + + /** + * Stops the delivery of recent pedestrian data updates to your Cordova app. + * @return {Promise} Returns a promise that resolves when pedometer watching was stopped + */ + @Cordova() + static stopPedometerUpdates(): Promise { return; } + + /** + * Retrieves the data between the specified start and end dates. + * The startDate and endDate options are required and can be constructed in any valid JavaScript way + * (e.g. new Date(2015, 4, 1, 15, 20, 00) is also valid, as is milliseconds). + * Only works on iOS. + * @param {any} options start date and en date where you want to get pedometer data + * @return {Promise} Returns a promise that resolves when pedometer data found + */ + @Cordova({ + callbackOrder: 'reverse' + }) + static queryData(options: { startDate: Date, endDate: Date }): Promise { return; } +}