diff --git a/src/index.ts b/src/index.ts index bde1d1862..f9cafe1d6 100644 --- a/src/index.ts +++ b/src/index.ts @@ -62,6 +62,7 @@ import { Globalization } from './plugins/globalization'; import { GooglePlus } from './plugins/google-plus'; import { GoogleMap } from './plugins/googlemap'; import { GoogleAnalytics } from './plugins/googleanalytics'; +import { Gyroscope } from './plugins/gyroscope'; import { HeaderColor } from './plugins/headercolor'; import { Hotspot } from './plugins/hotspot'; import { HTTP } from './plugins/http'; @@ -191,6 +192,7 @@ export * from './plugins/globalization'; export * from './plugins/google-plus'; export * from './plugins/googleanalytics'; export * from './plugins/googlemap'; +export * from './plugins/gyroscope'; export * from './plugins/headercolor'; export * from './plugins/hotspot'; export * from './plugins/http'; @@ -321,6 +323,7 @@ window['IonicNative'] = { GooglePlus, GoogleMap, GoogleAnalytics, + Gyroscope, HeaderColor, Hotspot, HTTP, diff --git a/src/plugins/gyroscope.ts b/src/plugins/gyroscope.ts new file mode 100644 index 000000000..108880c58 --- /dev/null +++ b/src/plugins/gyroscope.ts @@ -0,0 +1,100 @@ +import { Plugin, Cordova} from './plugin'; +import { Observable } from 'rxjs/Observable'; + +declare var navigator: any; + +/** + * Interface that represent output data + */ +export interface GyroscopeOrientation { + /** + * Represent x-axis + */ + x: number; + + /** + * Represent y-axis + */ + y: number; + + /** + * Represent z-axis + */ + z: number; + + /** + * Represent timestamp of sensor read. Default is 10000ms + */ + timestamp: number; +} + +/** + * Interface that represent option data + */ +export interface GyroscopeOptions { + /** + * Represent how often (in milliseconds) sensor should be read. Default is 10000 ms + */ + frequency: number; +} + +/** + * @name Gyroscope + * @description Read Gyroscope sensor data + * @usage + * ``` + * import { Gyroscope, GyroscopeOrientation, GyroscopeOptions } from 'ionic-native'; + * + * + * let options: GyroscopeOptions = { + * frequency: 1000 + * }; + * + * Gyroscope.getCurrent(options) + * .then((orientation: GyroscopeOrientation) => { + * console.log(orientation.x, orientation.y, orientation.z, orientation.timestamp); + * }) + * .catch() + * + * + * Gyroscope.watch() + * .subscribe((orientation: GyroscopeOrientation) => { + * console.log(orientation.x, orientation.y, orientation.z, orientation.timestamp); + * }); + * + * ``` + */ + @Plugin({ + pluginName: 'Gyroscope', + plugin: 'cordova-plugin-gyroscope', + pluginRef: 'navigator.gyroscope', + repo: 'https://github.com/NeoLSN/cordova-plugin-gyroscope', + platforms: ['Android', 'iOS'] + }) + + export class Gyroscope { + + /** + * Watching for gyroscope sensor changes + * @param options {GyroscopeOptions} (optional) + * @return {Observable} Returns an Observable that resolves GyroscopeOrientation + */ + static watch(options?: GyroscopeOptions): Observable { + return new Observable ( + (observer: any) => { + let watchId = navigator.gyroscope.watch(observer.next.bind(observer), observer.next.bind(observer), options); + return () => navigator.gyroscope.clearWatch(watchId); + } + ); + } + + /** + * Get current data from gyroscope sensor + * @param options {GyroscopeOptions} (optional) + * @return {Promise} Returns a promise that resolves GyroscopeOrientation + */ + @Cordova({ + callbackOrder: 'reverse' + }) + static getCurrent(options?: GyroscopeOptions): Promise { return; } + }