Skip to content

Commit 866c246

Browse files
committed
feat: turn off screen on Android while listening for proximity events
1 parent 67c27a0 commit 866c246

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

android/src/main/kotlin/dev/jeremyko/proximity_sensor/ProximitySensorPlugin.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11

22
package dev.jeremyko.proximity_sensor
33

4-
import androidx.annotation.NonNull
54
import io.flutter.embedding.engine.plugins.FlutterPlugin
65
import io.flutter.plugin.common.EventChannel
76

@@ -10,10 +9,9 @@ class ProximitySensorPlugin: FlutterPlugin {
109
private lateinit var channel : EventChannel
1110
private lateinit var streamHandler : ProximityStreamHandler
1211

13-
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
12+
override fun onAttachedToEngine(flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
1413
channel = EventChannel(flutterPluginBinding.binaryMessenger, "proximity_sensor")
15-
streamHandler = ProximityStreamHandler( flutterPluginBinding.applicationContext,
16-
flutterPluginBinding.binaryMessenger)
14+
streamHandler = ProximityStreamHandler( flutterPluginBinding.applicationContext)
1715
channel.setStreamHandler(streamHandler)
1816
}
1917

android/src/main/kotlin/dev/jeremyko/proximity_sensor/ProximityStreamHandler.kt

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,52 @@
11
package dev.jeremyko.proximity_sensor
22

3+
import android.annotation.SuppressLint
34
import android.content.Context
45
import android.hardware.Sensor
56
import android.hardware.SensorEvent
67
import android.hardware.SensorEventListener
78
import android.hardware.SensorManager
8-
import io.flutter.plugin.common.BinaryMessenger
9+
import android.os.Build
10+
import android.os.PowerManager
911
import io.flutter.plugin.common.EventChannel
10-
import java.io.IOException
1112
import java.lang.UnsupportedOperationException
1213

1314
////////////////////////////////////////////////////////////////////////////////////////////////////
1415
class ProximityStreamHandler(
1516
private val applicationContext: Context,
16-
private val messenger: BinaryMessenger
1717
): EventChannel.StreamHandler, SensorEventListener {
1818

1919
private var eventSink: EventChannel.EventSink? = null
2020
private lateinit var sensorManager: SensorManager
2121
private var proximitySensor: Sensor? = null
2222

23+
private lateinit var powerManager: PowerManager
24+
private lateinit var wakeLock: PowerManager.WakeLock
25+
26+
@SuppressLint("WakelockTimeout")
2327
override fun onListen(arguments: Any?, events: EventChannel.EventSink?) {
2428
eventSink = events
2529
sensorManager = applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager
2630
proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) ?:
2731
throw UnsupportedOperationException("proximity sensor unavailable")
2832

2933
sensorManager.registerListener(this, proximitySensor, SensorManager.SENSOR_DELAY_NORMAL)
34+
powerManager = applicationContext.getSystemService(Context.POWER_SERVICE) as
35+
PowerManager
36+
37+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
38+
wakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "dev.jeremyko.proximity_sensor:lock")
39+
if (!wakeLock.isHeld) {
40+
wakeLock.acquire()
41+
}
42+
}
3043
}
3144

3245
override fun onCancel(arguments: Any?) {
3346
sensorManager.unregisterListener(this, proximitySensor)
47+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
48+
wakeLock.release()
49+
}
3450
}
3551

3652
override fun onSensorChanged(event: SensorEvent?) {

0 commit comments

Comments
 (0)