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..5944439 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/williambout/react-native-proximity" }, "keywords": [ "react-native",