|
|
|
|
@ -21,8 +21,9 @@ class ProximityManager(private val context: Context) {
|
|
|
|
|
context.getSystemService(Context.SENSOR_SERVICE) as SensorManager |
|
|
|
|
private val sensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) |
|
|
|
|
|
|
|
|
|
private val _near = MutableStateFlow(false) |
|
|
|
|
val near: StateFlow<Boolean> = _near |
|
|
|
|
// null — первое показание ещё не получено; это не подтверждённое FAR. |
|
|
|
|
private val _near = MutableStateFlow<Boolean?>(null) |
|
|
|
|
val near: StateFlow<Boolean?> = _near |
|
|
|
|
|
|
|
|
|
private var listener: SensorEventListener? = null |
|
|
|
|
private var started = false |
|
|
|
|
@ -37,6 +38,7 @@ class ProximityManager(private val context: Context) {
|
|
|
|
|
val s = sensor |
|
|
|
|
if (s == null) { |
|
|
|
|
LogManager.addLog("WARN", "Proximity", "no proximity sensor on this device") |
|
|
|
|
_near.value = false |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
val l = object : SensorEventListener { |
|
|
|
|
@ -52,16 +54,20 @@ class ProximityManager(private val context: Context) {
|
|
|
|
|
override fun onAccuracyChanged(sensor: Sensor?, accuracy: Int) {} |
|
|
|
|
} |
|
|
|
|
listener = l |
|
|
|
|
sensorManager.registerListener(l, s, SensorManager.SENSOR_DELAY_NORMAL) |
|
|
|
|
if (!sensorManager.registerListener(l, s, SensorManager.SENSOR_DELAY_NORMAL)) { |
|
|
|
|
listener = null; started = false |
|
|
|
|
LogManager.addLog("WARN", "Proximity", "sensor registration failed; proximity remains unknown") |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
LogManager.addLog("INFO", "Proximity", "started (maxRange=${s.maximumRange})") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fun stop() { |
|
|
|
|
_near.value = null |
|
|
|
|
if (!started) return |
|
|
|
|
started = false |
|
|
|
|
listener?.let { sensorManager.unregisterListener(it) } |
|
|
|
|
listener = null |
|
|
|
|
_near.value = false |
|
|
|
|
LogManager.addLog("INFO", "Proximity", "stopped") |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|