Browse Source

Distinguish unknown proximity from confirmed far before speaker changes

master
evgeny 5 days ago
parent
commit
1b3d9ff8ee
  1. 6
      tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioRouter.kt
  2. 14
      tools/chatgui-android/app/src/main/java/com/utun/chat/data/ProximityManager.kt

6
tools/chatgui-android/app/src/main/java/com/utun/chat/data/CallAudioRouter.kt

@ -141,19 +141,19 @@ class CallAudioRouter {
LogManager.addLog("INFO", "CallAudioRouter", "stopped")
}
fun setRoute(r: AudioRoute, preferWired: Boolean = false) {
fun setRoute(r: AudioRoute, preferWired: Boolean = false, automatic: Boolean = false) {
if (r == AudioRoute.HEADSET && !headsetAvailable) {
LogManager.addLog("WARN", "CallAudioRouter", "setRoute HEADSET rejected: no headset available")
return
}
autoHeadset = false
if (!automatic) autoHeadset = false
val preferenceChanged = preferWiredHeadset != preferWired
preferWiredHeadset = preferWired
if (route == r && !preferenceChanged) return
route = r
preferredRoute = r
applyRoute(r)
LogManager.addLog("INFO", "CallAudioRouter", "route -> $r (headsetAvailable=$headsetAvailable)")
LogManager.addLog("INFO", "CallAudioRouter", "route -> $r (headsetAvailable=$headsetAvailable automatic=$automatic)")
onChanged?.invoke(route, headsetAvailable)
}

14
tools/chatgui-android/app/src/main/java/com/utun/chat/data/ProximityManager.kt

@ -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")
}
}

Loading…
Cancel
Save