From 23e6025e7e2e9aa981e8a6cf5cc7d421f80cbd77 Mon Sep 17 00:00:00 2001 From: mathias5r Date: Wed, 7 Jul 2021 10:15:06 -0300 Subject: [PATCH] enable disable proximity flag in android --- README.md | 9 ++++++++ .../com/RNProximity/RNProximityModule.java | 21 +++++++++++++++++++ index.js | 13 ++++++++++++ 3 files changed, 43 insertions(+) diff --git a/README.md b/README.md index c5d8201..0d81299 100755 --- a/README.md +++ b/README.md @@ -19,6 +19,14 @@ npm install --save react-native-proximity react-native link react-native-proximity ``` +## Android + +Include the following permission in `AndroidManifest.xml`: + +``` + +``` + ## Usage Import the library @@ -31,6 +39,7 @@ import Proximity from 'react-native-proximity'; The callback function returns an object with *proximity* and *distance* properties. If *proximity* is true, it means the device is close to an physical object. *distance* is only supported in Android. ```javascript componentDidMount(){ + Proximity.enableScreenOnOff(true) // enable screen on-off with proximity in android Proximity.addListener(this._proximityListener); }, diff --git a/android/src/main/java/com/RNProximity/RNProximityModule.java b/android/src/main/java/com/RNProximity/RNProximityModule.java index afc2311..c837317 100644 --- a/android/src/main/java/com/RNProximity/RNProximityModule.java +++ b/android/src/main/java/com/RNProximity/RNProximityModule.java @@ -28,6 +28,7 @@ public class RNProximityModule extends ReactContextBaseJavaModule implements Sen private static final String KEY_EVENT_ON_SENSOR_CHANGE = "EVENT_ON_SENSOR_CHANGE"; private static final String EVENT_ON_SENSOR_CHANGE = "onSensorChanged"; private final ReactApplicationContext reactContext; + private PowerManager.WakeLock wakeLock; private SensorManager mSensorManager; private Sensor mProximity; @@ -49,6 +50,16 @@ public void sendEvent(String eventName, @Nullable WritableMap params) { } } + private PowerManager.WakeLock getWakeLock(){ + Context context = this.reactContext.getApplicationContext(); + PowerManager powerManager = context.getSystemService(PowerManager.class); + PowerManager.WakeLock wl; + if (powerManager.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK)) { + return powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "WAKE_LOCK:" + TAG); + } + return null; + } + @ReactMethod public void addListener() { mSensorManager.registerListener(this, mProximity, SensorManager.SENSOR_DELAY_NORMAL); @@ -59,6 +70,16 @@ public void removeListener() { mSensorManager.unregisterListener(this); } + @ReactMethod + public void proximityEnabled(boolean enable) { + if(this.wakeLock != null){ + if(enable){ + this.wakeLock.acquire(); + } else + this.wakeLock.release(); + } + } + @Override public String getName() { return "RNProximity"; diff --git a/index.js b/index.js index 27e8789..253fd52 100755 --- a/index.js +++ b/index.js @@ -11,6 +11,12 @@ const nativeModule = NativeModules.RNProximity; let addListener = null; let removeListener = null; +// only for Android +let screenOnOff = false; +const enableScreenOnOff = function(value) { + screenOnOff = value; +}; + if (Platform.OS === 'ios') { addListener = function(callback) { NativeModules.RNProximity.proximityEnabled(true); @@ -26,10 +32,16 @@ if (Platform.OS === 'ios') { } } else if (Platform.OS == 'android') { addListener = (callback) => { + if (screenOnOff) { + nativeModule.proximityEnabled(true); + } nativeModule.addListener(); DeviceEventEmitter.addListener(nativeModule.EVENT_ON_SENSOR_CHANGE, e => callback(e)); }; removeListener = (listener) => { + if (screenOnOff) { + nativeModule.proximityEnabled(false); + } nativeModule.removeListener(); DeviceEventEmitter.removeAllListeners(nativeModule.EVENT_ON_SENSOR_CHANGE, listener); }; @@ -38,4 +50,5 @@ if (Platform.OS === 'ios') { module.exports = { addListener, removeListener, + enableScreenOnOff };