From 4863fd39ed4acdb96be411a3ebbb25af252f774f Mon Sep 17 00:00:00 2001 From: Stephan Brandt Date: Mon, 11 May 2020 15:44:56 +0200 Subject: [PATCH 1/2] Fix: iOS Implementation of Proximity Detection --- RNProximity/RNProximity/EventEmitter.h | 19 ++++++++++++++++++ RNProximity/RNProximity/EventEmitter.m | 17 ++++++++++++++++ RNProximity/RNProximity/RNProximity.h | 4 +++- RNProximity/RNProximity/RNProximity.m | 20 ++++++++++++++----- .../com/RNProximity/RNProximityModule.java | 3 ++- index.js | 8 +++----- package.json | 4 ++-- 7 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 RNProximity/RNProximity/EventEmitter.h create mode 100644 RNProximity/RNProximity/EventEmitter.m diff --git a/RNProximity/RNProximity/EventEmitter.h b/RNProximity/RNProximity/EventEmitter.h new file mode 100644 index 0000000..0845f94 --- /dev/null +++ b/RNProximity/RNProximity/EventEmitter.h @@ -0,0 +1,19 @@ +// +// EventEmitter.h +// AFNetworking +// +// Created by Stephan on 11.05.20. +// + +#import +#import + + +NS_ASSUME_NONNULL_BEGIN + +@interface EventEmitter: RCTEventEmitter + + +@end + +NS_ASSUME_NONNULL_END diff --git a/RNProximity/RNProximity/EventEmitter.m b/RNProximity/RNProximity/EventEmitter.m new file mode 100644 index 0000000..4cd5642 --- /dev/null +++ b/RNProximity/RNProximity/EventEmitter.m @@ -0,0 +1,17 @@ +// +// EventEmitter.m +// AFNetworking +// +// Created by Stephan on 11.05.20. +// + +#import "EventEmitter.h" + +@implementation EventEmitter + +- (NSArray *)supportedEvents { + return @[@"proximityStateDidChange"]; +} + +@end + diff --git a/RNProximity/RNProximity/RNProximity.h b/RNProximity/RNProximity/RNProximity.h index 3b73c90..d93a67e 100644 --- a/RNProximity/RNProximity/RNProximity.h +++ b/RNProximity/RNProximity/RNProximity.h @@ -5,10 +5,12 @@ // #import -#import #import #import #import @interface RNProximity : NSObject + +@property (retain) EventEmitter * emitter; + @end diff --git a/RNProximity/RNProximity/RNProximity.m b/RNProximity/RNProximity/RNProximity.m index f0f4d1c..0ba1330 100644 --- a/RNProximity/RNProximity/RNProximity.m +++ b/RNProximity/RNProximity/RNProximity.m @@ -6,17 +6,23 @@ #import #import +#import "EventEmitter.h" #import "RNProximity.h" + @implementation RNProximity @synthesize bridge = _bridge; +@synthesize emitter; + +RCT_EXPORT_MODULE(); - (instancetype)init { if ((self = [super init])) { [[UIDevice currentDevice] setProximityMonitoringEnabled:NO]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(sensorStateChange:) name:@"UIDeviceProximityStateDidChangeNotification" object:nil]; + emitter = [[EventEmitter alloc] init]; } return self; } @@ -26,18 +32,22 @@ - (void)dealloc [[NSNotificationCenter defaultCenter] removeObserver:self]; } ++ (BOOL) requiresMainQueueSetup { + return YES; +} - (void)sensorStateChange:(NSNotificationCenter *)notification { BOOL proximityState = [[UIDevice currentDevice] proximityState]; - [_bridge.eventDispatcher sendDeviceEventWithName:@"proximityStateDidChange" - body:@{@"proximity": @(proximityState)}]; + emitter.bridge = self.bridge; + [emitter sendEventWithName:@"proximityStateDidChange" + body:@{@"proximity": @(proximityState)}]; } -RCT_EXPORT_MODULE(); - RCT_EXPORT_METHOD(proximityEnabled:(BOOL)enabled) { - [[UIDevice currentDevice] setProximityMonitoringEnabled:enabled]; + dispatch_async(dispatch_get_main_queue(), ^{ + [[UIDevice currentDevice] setProximityMonitoringEnabled:enabled]; + }); } @end diff --git a/android/src/main/java/com/RNProximity/RNProximityModule.java b/android/src/main/java/com/RNProximity/RNProximityModule.java index afc2311..6c63ba6 100644 --- a/android/src/main/java/com/RNProximity/RNProximityModule.java +++ b/android/src/main/java/com/RNProximity/RNProximityModule.java @@ -6,9 +6,10 @@ import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; -import android.support.annotation.Nullable; import android.util.Log; +import androidx.annotation.Nullable; + import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; diff --git a/index.js b/index.js index 27e8789..ce4dd72 100755 --- a/index.js +++ b/index.js @@ -1,25 +1,23 @@ -'use strict'; - import { DeviceEventEmitter, NativeModules, Platform, } from 'react-native'; -const nativeModule = NativeModules.RNProximity; +const { RNProximity } = NativeModules; let addListener = null; let removeListener = null; if (Platform.OS === 'ios') { addListener = function(callback) { - NativeModules.RNProximity.proximityEnabled(true); + RNProximity.proximityEnabled(true); return DeviceEventEmitter.addListener( 'proximityStateDidChange', callback ); }, removeListener = function(listener) { - NativeModules.RNProximity.proximityEnabled(false); + RNProximity.proximityEnabled(false); DeviceEventEmitter.removeAllListeners( 'proximityStateDidChange', listener ); diff --git a/package.json b/package.json index 7fe4966..5863a00 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-proximity", - "version": "3.0.0", + "version": "3.0.1", "description": "Detect proximity on iOS and Android", "main": "index.js", "scripts": { @@ -8,7 +8,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/williambout/react-native-proximity.git" + "url": "https://github.com/contagt/react-native-proximity" }, "keywords": [ "react-native", From f059954a8325b07eda7615b8a80f42ff64ac66af Mon Sep 17 00:00:00 2001 From: Stephan Date: Fri, 15 May 2020 08:38:05 +0200 Subject: [PATCH 2/2] Fix: Back to original github uri --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5863a00..5944439 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ }, "repository": { "type": "git", - "url": "https://github.com/contagt/react-native-proximity" + "url": "https://github.com/williambout/react-native-proximity" }, "keywords": [ "react-native",