From b2069c3a015032798a2a09857e13025fc27cc321 Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Fri, 18 Nov 2016 13:54:51 +0500 Subject: [PATCH 01/10] Android perpendicular heading --- .../ReactNativeHeadingModule.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java index 395ade8..e67eb94 100755 --- a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java +++ b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java @@ -36,7 +36,8 @@ public class ReactNativeHeadingModule extends ReactContextBaseJavaModule impleme private static Context mApplicationContext; private int mAzimuth = 0; // degree - private int mFilter = 5; + private int newAzimuth = 0; // degree + private float mFilter = 5; private SensorManager mSensorManager; private Sensor mSensor; private float[] orientation = new float[3]; @@ -82,21 +83,21 @@ public void onSensorChanged(SensorEvent event) { // calculate th rotation matrix SensorManager.getRotationMatrixFromVector(rMat, event.values); // get the azimuth value (orientation[0]) in degree - int newAzimuth = (int) ( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[0] ) + 360 ) % 360; - + newAzimuth = (((( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[0] ) + 360 ) % 360) - + ( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[2] ))) +360) % 360; //dont react to changes smaller than the filter value if (Math.abs(mAzimuth - newAzimuth) < mFilter) { return; } - mAzimuth = newAzimuth; - Log.e("TAG", String.valueOf(newAzimuth)); - WritableMap params = Arguments.createMap(); - params.putInt("heading", mAzimuth); - getReactApplicationContext() .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit("headingUpdated", params); + .emit("headingUpdated", (int) newAzimuth); + + mAzimuth = newAzimuth; + // Log.e("Azimuth", + // String.valueOf(newAzimuth)); + // } } From df9ee705a3b51df166792f018f22f3c1f5da73c3 Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Fri, 18 Nov 2016 15:50:21 +0500 Subject: [PATCH 02/10] - Min SDK version to 16 - Removed unused dependency --- android/build.gradle | 3 +-- .../reactnativeheading/ReactNativeHeadingModule.java | 8 +++----- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 55dc946..44b81d3 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -15,7 +15,7 @@ android { buildToolsVersion "23.0.1" defaultConfig { - minSdkVersion 18 + minSdkVersion 16 targetSdkVersion 22 versionCode 1 versionName "1.0" @@ -31,5 +31,4 @@ repositories { dependencies { compile 'com.facebook.react:react-native:0.20.+' - compile "com.joshblour.discovery:discovery:0.0.3" } diff --git a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java index e67eb94..ef9731e 100755 --- a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java +++ b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java @@ -20,8 +20,6 @@ import com.facebook.react.bridge.WritableArray; import com.facebook.react.bridge.WritableMap; import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.joshblour.discovery.BLEUser; -import com.joshblour.discovery.Discovery; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -37,7 +35,7 @@ public class ReactNativeHeadingModule extends ReactContextBaseJavaModule impleme private static Context mApplicationContext; private int mAzimuth = 0; // degree private int newAzimuth = 0; // degree - private float mFilter = 5; + private int mFilter = 5; private SensorManager mSensorManager; private Sensor mSensor; private float[] orientation = new float[3]; @@ -83,7 +81,7 @@ public void onSensorChanged(SensorEvent event) { // calculate th rotation matrix SensorManager.getRotationMatrixFromVector(rMat, event.values); // get the azimuth value (orientation[0]) in degree - newAzimuth = (((( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[0] ) + 360 ) % 360) - + newAzimuth = (int) (((( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[0] ) + 360 ) % 360) - ( Math.toDegrees( SensorManager.getOrientation( rMat, orientation )[2] ))) +360) % 360; //dont react to changes smaller than the filter value if (Math.abs(mAzimuth - newAzimuth) < mFilter) { @@ -97,7 +95,7 @@ public void onSensorChanged(SensorEvent event) { mAzimuth = newAzimuth; // Log.e("Azimuth", // String.valueOf(newAzimuth)); - // + } } From 648894d508a4b0181795b3ffcdfbef5fd49a5d4e Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Thu, 18 Jan 2018 14:46:56 +0500 Subject: [PATCH 03/10] Refactoring and RN version update --- .gitignore | 1 + ReactNativeHeading.android.js | 10 --------- ReactNativeHeading.h | 7 +++--- ReactNativeHeading.ios.js | 6 ----- ReactNativeHeading.js | 12 ++++++++++ ReactNativeHeading.m | 14 +++++++----- android/build.gradle | 2 +- .../ReactNativeHeadingModule.java | 3 --- .../ReactNativeHeadingPackage.java | 5 ----- react-native-heading.podspec | 22 +++++++++++++++++++ 10 files changed, 47 insertions(+), 35 deletions(-) create mode 100644 .gitignore delete mode 100644 ReactNativeHeading.android.js delete mode 100644 ReactNativeHeading.ios.js create mode 100644 ReactNativeHeading.js create mode 100644 react-native-heading.podspec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e43b0f9 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.DS_Store diff --git a/ReactNativeHeading.android.js b/ReactNativeHeading.android.js deleted file mode 100644 index 87dac21..0000000 --- a/ReactNativeHeading.android.js +++ /dev/null @@ -1,10 +0,0 @@ -/** * - * @providesModule ReactNativeHeading - * @flow - */ -'use strict'; - -var React = require('react-native'); -var ReactNativeHeading = React.NativeModules.ReactNativeHeading; - -module.exports = ReactNativeHeading; diff --git a/ReactNativeHeading.h b/ReactNativeHeading.h index e0b2b5c..f760db6 100644 --- a/ReactNativeHeading.h +++ b/ReactNativeHeading.h @@ -5,10 +5,9 @@ // Created by Yonah Forst on 18/02/16. // Copyright © 2016 Yonah Forst. All rights reserved. // -#import "RCTBridgeModule.h" +#import +#import -#import - -@interface ReactNativeHeading : NSObject +@interface ReactNativeHeading : RCTEventEmitter @end diff --git a/ReactNativeHeading.ios.js b/ReactNativeHeading.ios.js deleted file mode 100644 index b3e92e4..0000000 --- a/ReactNativeHeading.ios.js +++ /dev/null @@ -1,6 +0,0 @@ -'use strict'; - -var React = require('react-native'); -var Heading = React.NativeModules.ReactNativeHeading; - -module.exports = Heading; diff --git a/ReactNativeHeading.js b/ReactNativeHeading.js new file mode 100644 index 0000000..b79b49b --- /dev/null +++ b/ReactNativeHeading.js @@ -0,0 +1,12 @@ +/** + * + * @providesModule ReactNativeHeading + * + */ +'use strict'; + +import { + NativeModules +} from 'react-native'; + +export default NativeModules.ReactNativeHeading; \ No newline at end of file diff --git a/ReactNativeHeading.m b/ReactNativeHeading.m index 9df8593..399c93e 100644 --- a/ReactNativeHeading.m +++ b/ReactNativeHeading.m @@ -8,9 +8,9 @@ #import "ReactNativeHeading.h" -#import "RCTBridge.h" -#import "RCTConvert.h" -#import "RCTEventDispatcher.h" +#import +#import +#import #import @@ -54,6 +54,10 @@ - (instancetype)init [self.locManager stopUpdatingHeading]; } +- (NSArray *)supportedEvents { + return @[@"headingUpdated"]; +} + - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading *)newHeading { if (newHeading.headingAccuracy < 0) return; @@ -62,9 +66,7 @@ - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading CLLocationDirection heading = ((newHeading.trueHeading > 0) ? newHeading.trueHeading : newHeading.magneticHeading); - NSDictionary *headingEvent = @{@"heading": @(heading)}; - - [self.bridge.eventDispatcher sendDeviceEventWithName:@"headingUpdated" body:headingEvent]; + [self sendEventWithName:@"headingUpdated" body:@(heading)]; } @end diff --git a/android/build.gradle b/android/build.gradle index 44b81d3..dc4f79d 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -30,5 +30,5 @@ repositories { } dependencies { - compile 'com.facebook.react:react-native:0.20.+' + compile 'com.facebook.react:react-native:+' } diff --git a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java index ef9731e..5de3050 100755 --- a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java +++ b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingModule.java @@ -51,9 +51,6 @@ public String getName() { return "ReactNativeHeading"; } - - - @ReactMethod public void start(int filter, Promise promise) { diff --git a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingPackage.java b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingPackage.java index df0e4be..24e0bf7 100755 --- a/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingPackage.java +++ b/android/src/main/java/com/joshblour/reactnativeheading/ReactNativeHeadingPackage.java @@ -24,11 +24,6 @@ public List createNativeModules(ReactApplicationContext reactConte modules.add(new ReactNativeHeadingModule(reactContext)); return modules; } - @Override - public List> createJSModules() { - return Collections.emptyList(); - } - @Override public List createViewManagers(ReactApplicationContext reactContext) { return Arrays.asList(); diff --git a/react-native-heading.podspec b/react-native-heading.podspec new file mode 100644 index 0000000..c7a3f5e --- /dev/null +++ b/react-native-heading.podspec @@ -0,0 +1,22 @@ +require 'json' + +package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) + +Pod::Spec.new do |s| + s.name = 'react-native-heading' + s.version = package['version'] + s.summary = package['description'] + s.description = package['description'] + s.license = package['license'] + s.author = package['author'] + s.homepage = package['homepage'] + s.source = { :git => 'https://github.com/zsajjad/react-native-heading', :tag => s.version } + + s.requires_arc = true + s.platform = :ios, '8.0' + + s.preserve_paths = 'LICENSE', 'README.md', 'package.json', 'ReactNativeHeading.ios.js' + s.source_files = '*.{h,m}' + + s.dependency 'React' +end From 4fb91404acb9ada898293c741023ecfd519171dd Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Thu, 18 Jan 2018 14:50:31 +0500 Subject: [PATCH 04/10] Update documentation --- README.md | 26 +++++++++++++------------- package.json | 10 +++++----- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index eddaa33..2b579ba 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,13 @@ # React Native Heading Get device heading information on iOS or Android -##What +## What Report back device orientation in degrees, 0-360, with 0 being North. -####Example +#### Example ```java -const { DeviceEventEmitter } = require('react-native'); -const ReactNativeHeading = require('react-native-heading'); +import { DeviceEventEmitter } from 'react-native'; +import ReactNativeHeading from 'react-native-heading'; //.... componentDidMount() { @@ -18,8 +18,8 @@ const ReactNativeHeading = require('react-native-heading'); }) }) - DeviceEventEmitter.addListener('headingUpdated', data => { - console.log('New heading is:', data.heading); + DeviceEventEmitter.addListener('headingUpdated', heading => { + console.log('New heading is:', heading); }); } @@ -31,25 +31,25 @@ const ReactNativeHeading = require('react-native-heading'); ``` -####API +#### API `start(filter)` - Start receiving heading updates. Accepts an optional filter param (int) to ignore heading changes less than the spcified threshold. The default value is 5. Returns a promise which can be used to determine if heading updates are suported by the device. `stop` - Stop receiving heaing updates (don't forget to remove the `headingUpdated` listener) -##Setup +## Setup ```` npm install --save react-native-heading ```` -###iOS +### iOS * Run open node_modules/react-native-heading * Drag ReactNativeHeading.xcodeproj into your Libraries group -###Android -#####Step 1 - Update Gradle Settings +### Android +##### Step 1 - Update Gradle Settings ``` // file: android/settings.gradle @@ -58,7 +58,7 @@ npm install --save react-native-heading include ':react-native-heading' project(':react-native-heading').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-heading/android') ``` -#####Step 2 - Update Gradle Build +##### Step 2 - Update Gradle Build ``` // file: android/app/build.gradle @@ -69,7 +69,7 @@ dependencies { compile project(':react-native-heading') } ``` -#####Step 3 - Register React Package +##### Step 3 - Register React Package ``` ... import com.joshblour.reactnativeheading.ReactNativeHeadingPackage; // <--- import diff --git a/package.json b/package.json index 77c3edf..73de07b 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { - "name": "react-native-heading", - "version": "1.0.0", + "name": "@zsajjad/react-native-heading", + "version": "1.1.0", "repository": { "type": "git", - "url": "https://github.com/joshblour/react-native-heading.git" + "url": "https://github.com/zsajjad/react-native-heading.git" }, "license": "MIT", - "keywords": ["react-native", "react-component"], + "keywords": ["react-native", "react-component", "heading", "azimuth"], "main": "ReactNativeHeading", - "author": "Yonah Forst " + "author": "Zain Sajjad " } From c0f06bc73312a0454085ded300a6c4448d891c53 Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Thu, 18 Jan 2018 14:52:33 +0500 Subject: [PATCH 05/10] Update documentation --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2b579ba..4baf8b5 100644 --- a/README.md +++ b/README.md @@ -40,9 +40,9 @@ import ReactNativeHeading from 'react-native-heading'; ## Setup -```` -npm install --save react-native-heading -```` +``` +yarn add https://github.com/zsajjad/react-native-heading.git +``` ### iOS * Run open node_modules/react-native-heading From f8f73dcade161ed9d4f287ef22531d11dd0e0fd6 Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Thu, 18 Jan 2018 14:53:37 +0500 Subject: [PATCH 06/10] Update documentation --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4baf8b5..b9e564d 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Get device heading information on iOS or Android Report back device orientation in degrees, 0-360, with 0 being North. #### Example -```java +```javascript import { DeviceEventEmitter } from 'react-native'; import ReactNativeHeading from 'react-native-heading'; From f6b4e841cb74d9e31ba745df9453596155095fc0 Mon Sep 17 00:00:00 2001 From: Cristiano Santos Date: Mon, 5 Mar 2018 11:20:11 +0000 Subject: [PATCH 07/10] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index b9e564d..23b8851 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Report back device orientation in degrees, 0-360, with 0 being North. #### Example ```javascript import { DeviceEventEmitter } from 'react-native'; -import ReactNativeHeading from 'react-native-heading'; +import ReactNativeHeading from '@zsajjad/react-native-heading'; //.... componentDidMount() { @@ -45,8 +45,9 @@ yarn add https://github.com/zsajjad/react-native-heading.git ``` ### iOS -* Run open node_modules/react-native-heading -* Drag ReactNativeHeading.xcodeproj into your Libraries group +* Run open node_modules/@zsajjad/react-native-heading +* Drag ReactNativeHeading.xcodeproj into your Libraries group of XCode's project navigator +* In XCode add Libraries/ReactNativeHeading.xcodeproj/Products/libReactNativeHeading.a to the "Link Binary with Libraries" section of the Build Phases ### Android ##### Step 1 - Update Gradle Settings @@ -56,7 +57,7 @@ yarn add https://github.com/zsajjad/react-native-heading.git ... include ':react-native-heading' -project(':react-native-heading').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-heading/android') +project(':react-native-heading').projectDir = new File(rootProject.projectDir, '../node_modules/@zsajjad/react-native-heading/android') ``` ##### Step 2 - Update Gradle Build From 47ce21edb743ddad96f938bb0e41f02c52a530e2 Mon Sep 17 00:00:00 2001 From: Cristiano Santos Date: Mon, 5 Mar 2018 11:43:09 +0000 Subject: [PATCH 08/10] Updated README according to react-native 0.49.3 --- README.md | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 23b8851..277fb70 100644 --- a/README.md +++ b/README.md @@ -6,11 +6,12 @@ Report back device orientation in degrees, 0-360, with 0 being North. #### Example ```javascript -import { DeviceEventEmitter } from 'react-native'; +import { NativeEventEmitter } from 'react-native'; import ReactNativeHeading from '@zsajjad/react-native-heading'; //.... componentDidMount() { + this.listener = new NativeEventEmitter(ReactNativeHeading) ReactNativeHeading.start(1) .then(didStart => { this.setState({ @@ -18,14 +19,14 @@ import ReactNativeHeading from '@zsajjad/react-native-heading'; }) }) - DeviceEventEmitter.addListener('headingUpdated', heading => { + this.listener.addListener('headingUpdated', heading => { console.log('New heading is:', heading); }); } componentWillUnmount() { ReactNativeHeading.stop(); - DeviceEventEmitter.removeAllListeners('headingUpdated'); + this.listener.removeAllListeners('headingUpdated'); } //... ``` From daa979587ef5b1f23e1ea901ff73a28ee114c35e Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Fri, 20 Jul 2018 12:22:56 +0500 Subject: [PATCH 09/10] Fixed pod issue --- package.json | 2 ++ react-native-heading.podspec | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 73de07b..16d999d 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,8 @@ "type": "git", "url": "https://github.com/zsajjad/react-native-heading.git" }, + "homepage": "https://github.com/zsajjad/react-native-heading.git", + "summary": "RN Package for head sensor detection", "license": "MIT", "keywords": ["react-native", "react-component", "heading", "azimuth"], "main": "ReactNativeHeading", diff --git a/react-native-heading.podspec b/react-native-heading.podspec index c7a3f5e..212c0ee 100644 --- a/react-native-heading.podspec +++ b/react-native-heading.podspec @@ -5,7 +5,7 @@ package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) Pod::Spec.new do |s| s.name = 'react-native-heading' s.version = package['version'] - s.summary = package['description'] + s.summary = package['summary'] s.description = package['description'] s.license = package['license'] s.author = package['author'] From da7af9eacbd6133ef85dec6c50019033735b8a73 Mon Sep 17 00:00:00 2001 From: Zain Sajjad Date: Tue, 9 Jul 2019 16:18:10 +0500 Subject: [PATCH 10/10] Update build.gradle --- android/build.gradle | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index dc4f79d..eb24e51 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -11,12 +11,10 @@ buildscript { apply plugin: 'com.android.library' android { - compileSdkVersion 23 - buildToolsVersion "23.0.1" - + compileSdkVersion 26 defaultConfig { minSdkVersion 16 - targetSdkVersion 22 + targetSdkVersion 26 versionCode 1 versionName "1.0" } @@ -30,5 +28,5 @@ repositories { } dependencies { - compile 'com.facebook.react:react-native:+' + implementation 'com.facebook.react:react-native:+' }