|
1 | 1 | package dev.jeremyko.proximity_sensor |
2 | 2 |
|
| 3 | +import android.annotation.SuppressLint |
3 | 4 | import android.content.Context |
4 | 5 | import android.hardware.Sensor |
5 | 6 | import android.hardware.SensorEvent |
6 | 7 | import android.hardware.SensorEventListener |
7 | 8 | import android.hardware.SensorManager |
8 | | -import io.flutter.plugin.common.BinaryMessenger |
| 9 | +import android.os.Build |
| 10 | +import android.os.PowerManager |
9 | 11 | import io.flutter.plugin.common.EventChannel |
10 | | -import java.io.IOException |
11 | 12 | import java.lang.UnsupportedOperationException |
12 | 13 |
|
13 | 14 | //////////////////////////////////////////////////////////////////////////////////////////////////// |
14 | 15 | class ProximityStreamHandler( |
15 | 16 | private val applicationContext: Context, |
16 | | - private val messenger: BinaryMessenger |
17 | 17 | ): EventChannel.StreamHandler, SensorEventListener { |
18 | 18 |
|
19 | 19 | private var eventSink: EventChannel.EventSink? = null |
20 | 20 | private lateinit var sensorManager: SensorManager |
21 | 21 | private var proximitySensor: Sensor? = null |
22 | 22 |
|
| 23 | + private lateinit var powerManager: PowerManager |
| 24 | + private lateinit var wakeLock: PowerManager.WakeLock |
| 25 | + |
| 26 | + @SuppressLint("WakelockTimeout") |
23 | 27 | override fun onListen(arguments: Any?, events: EventChannel.EventSink?) { |
24 | 28 | eventSink = events |
25 | 29 | sensorManager = applicationContext.getSystemService(Context.SENSOR_SERVICE) as SensorManager |
26 | 30 | proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) ?: |
27 | 31 | throw UnsupportedOperationException("proximity sensor unavailable") |
28 | 32 |
|
29 | 33 | 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 | + } |
30 | 43 | } |
31 | 44 |
|
32 | 45 | override fun onCancel(arguments: Any?) { |
33 | 46 | sensorManager.unregisterListener(this, proximitySensor) |
| 47 | + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { |
| 48 | + wakeLock.release() |
| 49 | + } |
34 | 50 | } |
35 | 51 |
|
36 | 52 | override fun onSensorChanged(event: SensorEvent?) { |
|
0 commit comments