From de2c7d38bfeada998627594f85821b85215ffb43 Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 6 Aug 2021 11:32:03 -0300 Subject: [PATCH] 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. --- .../voice/VoiceNoteProximityWakeLockManager.kt | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager.kt b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager.kt index e87059ebdd..0de3e7f08f 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/voice/VoiceNoteProximityWakeLockManager.kt @@ -36,7 +36,7 @@ class VoiceNoteProximityWakeLockManager( } 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 hardwareSensorEventListener = HardwareSensorEventListener() @@ -44,15 +44,21 @@ class VoiceNoteProximityWakeLockManager( private var startTime: Long = -1 init { - activity.lifecycle.addObserver(this) + if (proximitySensor != null) { + activity.lifecycle.addObserver(this) + } } override fun onResume(owner: LifecycleOwner) { - mediaController.registerCallback(mediaControllerCallback) + if (proximitySensor != null) { + mediaController.registerCallback(mediaControllerCallback) + } } override fun onPause(owner: LifecycleOwner) { - unregisterCallbacksAndRelease() + if (proximitySensor != null) { + unregisterCallbacksAndRelease() + } } fun unregisterCallbacksAndRelease() { @@ -110,7 +116,7 @@ class VoiceNoteProximityWakeLockManager( 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 } else { AudioManager.STREAM_MUSIC