Skip to content

Commit

Permalink
feat(gyroscope): add Gyroscope plugin (#1004)
Browse files Browse the repository at this point in the history
* add gyroscope.ts to plugins

* add gyroscope to index

* Update gyroscope.ts

* Update gyroscope.ts
  • Loading branch information
stormwin authored and ihadeed committed Mar 2, 2017
1 parent 57e2691 commit 0378b1d
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 0 deletions.
3 changes: 3 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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';
Expand Down Expand Up @@ -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';
Expand Down Expand Up @@ -321,6 +323,7 @@ window['IonicNative'] = {
GooglePlus,
GoogleMap,
GoogleAnalytics,
Gyroscope,
HeaderColor,
Hotspot,
HTTP,
Expand Down
100 changes: 100 additions & 0 deletions src/plugins/gyroscope.ts
Original file line number Diff line number Diff line change
@@ -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<GyroscopeOrientation>} Returns an Observable that resolves GyroscopeOrientation
*/
static watch(options?: GyroscopeOptions): Observable<GyroscopeOrientation> {
return new Observable<GyroscopeOrientation> (
(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<GyroscopeOrientation>} Returns a promise that resolves GyroscopeOrientation
*/
@Cordova({
callbackOrder: 'reverse'
})
static getCurrent(options?: GyroscopeOptions): Promise<GyroscopeOrientation> { return; }
}

0 comments on commit 0378b1d

Please sign in to comment.