From 15373f6b214e2eaf0f956fe7c2f286aaa588f5a1 Mon Sep 17 00:00:00 2001 From: Martin Kraina Date: Mon, 6 Nov 2017 08:40:54 +0100 Subject: [PATCH 1/4] move location access requesting from init move location access request to start so it asks only when is actualy about to start heading updating --- ios/RNSimpleCompass.m | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/ios/RNSimpleCompass.m b/ios/RNSimpleCompass.m index 17c6655..8d16b28 100644 --- a/ios/RNSimpleCompass.m +++ b/ios/RNSimpleCompass.m @@ -15,16 +15,12 @@ - (instancetype)init { if ([CLLocationManager headingAvailable]) { self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; - if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) { - NSLog(@"Requesting permission"); - [self.locationManager requestWhenInUseAuthorization]; - } } else { NSLog(@"Heading not available"); } } - + return self; } @@ -60,6 +56,10 @@ - (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)mana #pragma mark - React RCT_EXPORT_METHOD(start: (NSInteger) headingFilter) { + if ([CLLocationManager authorizationStatus] == kCLAuthorizationStatusNotDetermined) { + NSLog(@"Requesting permission"); + [self.locationManager requestWhenInUseAuthorization]; + } self.locationManager.headingFilter = headingFilter; [self.locationManager startUpdatingHeading]; } @@ -71,3 +71,4 @@ - (BOOL)locationManagerShouldDisplayHeadingCalibration:(CLLocationManager *)mana RCT_EXPORT_MODULE() @end + From 38931e30236a9d4e37564a1fb9cdd5f474adcdc3 Mon Sep 17 00:00:00 2001 From: martin kraina Date: Wed, 16 Jan 2019 19:09:40 +0100 Subject: [PATCH 2/4] added accuracy delegation --- .../com/reactlibrary/RNSimpleCompassModule.java | 8 +++++++- index.js | 14 ++++++++------ ios/RNSimpleCompass.m | 5 ++++- 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/reactlibrary/RNSimpleCompassModule.java b/android/src/main/java/com/reactlibrary/RNSimpleCompassModule.java index 5e27cba..64dbb73 100644 --- a/android/src/main/java/com/reactlibrary/RNSimpleCompassModule.java +++ b/android/src/main/java/com/reactlibrary/RNSimpleCompassModule.java @@ -7,6 +7,8 @@ import android.hardware.SensorManager; import android.content.Context; + +import com.facebook.react.bridge.WritableMap; import com.facebook.react.modules.core.DeviceEventManagerModule; import com.facebook.react.bridge.Arguments; @@ -74,10 +76,14 @@ public void onSensorChanged(SensorEvent event) { } mAzimuth = newAzimuth; + WritableMap map = Arguments.createMap(); + + map.putDouble("heading", mAzimuth); + map.putDouble("accuracy",event.accuracy); getReactApplicationContext() .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit("HeadingUpdated", mAzimuth); + .emit("HeadingUpdated", map); } } diff --git a/index.js b/index.js index 644bc31..0434f79 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ - -import { NativeModules, NativeEventEmitter } from 'react-native'; +import { NativeModules, NativeEventEmitter, Dimensions } from "react-native"; const { RNSimpleCompass } = NativeModules; let listener; @@ -12,18 +11,21 @@ RNSimpleCompass.start = (update_rate, callback) => { } const compassEventEmitter = new NativeEventEmitter(RNSimpleCompass); - listener = compassEventEmitter.addListener('HeadingUpdated', (degree) => { - callback(degree); + listener = compassEventEmitter.addListener("HeadingUpdated", course => { + const correctedCourse = { ...course }; + const { height, width } = Dimensions.get("window"); + if (width < height) correctedCourse.heading += 90; + callback(correctedCourse); }); _start(update_rate === null ? 0 : update_rate); -} +}; let _stop = RNSimpleCompass.stop; RNSimpleCompass.stop = () => { listener && listener.remove(); listener = null; _stop(); -} +}; export default RNSimpleCompass; diff --git a/ios/RNSimpleCompass.m b/ios/RNSimpleCompass.m index 8d16b28..6a51a77 100644 --- a/ios/RNSimpleCompass.m +++ b/ios/RNSimpleCompass.m @@ -36,7 +36,10 @@ - (void)locationManager:(CLLocationManager *)manager didUpdateHeading:(CLHeading if (newHeading.headingAccuracy < 0) { return; } - [self sendEventWithName:kHeadingUpdated body:@(newHeading.trueHeading)]; + [self sendEventWithName:kHeadingUpdated body:(@{ + @"heading": @(newHeading.trueHeading), + @"accuracy": @(newHeading.headingAccuracy) + })]; } - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status { From 5c6bfc6cb7630582afad567971f31cc146562cf6 Mon Sep 17 00:00:00 2001 From: martin kraina Date: Wed, 16 Jan 2019 19:29:00 +0100 Subject: [PATCH 3/4] increased version to overcome yarn bug --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c081bde..6dd8cc8 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-simple-compass", - "version": "1.0.0", + "version": "1.0.1", "description": "Simple module exposing the compass on iOS and Android", "main": "index.js", "scripts": { From 075a6dfabb544c992be169503a0e45ba7b30f74a Mon Sep 17 00:00:00 2001 From: martin kraina Date: Wed, 16 Jan 2019 21:44:53 +0100 Subject: [PATCH 4/4] fixed landscape correction --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 0434f79..cb49b97 100644 --- a/index.js +++ b/index.js @@ -14,7 +14,7 @@ RNSimpleCompass.start = (update_rate, callback) => { listener = compassEventEmitter.addListener("HeadingUpdated", course => { const correctedCourse = { ...course }; const { height, width } = Dimensions.get("window"); - if (width < height) correctedCourse.heading += 90; + if (width > height) correctedCourse.heading += 90; callback(correctedCourse); });