Fix NPE in proximity sensor management.

If a device either does not have a proximity sensor or has a
non-functioning sensor, we can hit an NPE as soon as we hit
MainActivity. This fix ensures proper handling if a sensor is
unavailable.
fork-5.53.8
Alex Hart 2021-08-06 11:32:03 -03:00
rodzic c9597ef8dc
commit de2c7d38bf
1 zmienionych plików z 11 dodań i 5 usunięć

Wyświetl plik

@ -36,7 +36,7 @@ class VoiceNoteProximityWakeLockManager(
} }
private val sensorManager: SensorManager = ServiceUtil.getSensorManager(activity) private val sensorManager: SensorManager = ServiceUtil.getSensorManager(activity)
private val proximitySensor: Sensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY) private val proximitySensor: Sensor? = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY)
private val mediaControllerCallback = MediaControllerCallback() private val mediaControllerCallback = MediaControllerCallback()
private val hardwareSensorEventListener = HardwareSensorEventListener() private val hardwareSensorEventListener = HardwareSensorEventListener()
@ -44,16 +44,22 @@ class VoiceNoteProximityWakeLockManager(
private var startTime: Long = -1 private var startTime: Long = -1
init { init {
if (proximitySensor != null) {
activity.lifecycle.addObserver(this) activity.lifecycle.addObserver(this)
} }
}
override fun onResume(owner: LifecycleOwner) { override fun onResume(owner: LifecycleOwner) {
if (proximitySensor != null) {
mediaController.registerCallback(mediaControllerCallback) mediaController.registerCallback(mediaControllerCallback)
} }
}
override fun onPause(owner: LifecycleOwner) { override fun onPause(owner: LifecycleOwner) {
if (proximitySensor != null) {
unregisterCallbacksAndRelease() unregisterCallbacksAndRelease()
} }
}
fun unregisterCallbacksAndRelease() { fun unregisterCallbacksAndRelease() {
mediaController.unregisterCallback(mediaControllerCallback) mediaController.unregisterCallback(mediaControllerCallback)
@ -110,7 +116,7 @@ class VoiceNoteProximityWakeLockManager(
return return
} }
val newStreamType = if (event.values[0] < PROXIMITY_THRESHOLD && event.values[0] != proximitySensor.maximumRange) { val newStreamType = if (event.values[0] < PROXIMITY_THRESHOLD && event.values[0] != proximitySensor?.maximumRange) {
AudioManager.STREAM_VOICE_CALL AudioManager.STREAM_VOICE_CALL
} else { } else {
AudioManager.STREAM_MUSIC AudioManager.STREAM_MUSIC