From 9c7a5e3cc816427d3f2e9a8b5066f25667c50a8a Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Fri, 17 Jun 2022 16:08:02 -0300 Subject: [PATCH] Disable voice note proximity sensor when using bluetooth headset. (#2448) --- app/build.gradle | 2 ++ .../VoiceNoteProximityWakeLockManager.kt | 27 ++++++++++++++++++- dependencies.gradle | 1 + gradle/verification-metadata.xml | 13 +++++++++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index ff9700096..530476f3e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -434,6 +434,8 @@ dependencies { implementation libs.conscrypt.android implementation libs.signal.aesgcmprovider + implementation libs.audioswitch + implementation project(':libsignal-service') implementation project(':paging') implementation project(':core-util') 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 499dea8a2..5da0d8821 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 @@ -14,6 +14,8 @@ import androidx.fragment.app.FragmentActivity import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner +import com.twilio.audioswitch.AudioDevice +import com.twilio.audioswitch.AudioSwitch import org.signal.core.util.logging.Log import org.thoughtcrime.securesms.util.ServiceUtil import java.util.concurrent.TimeUnit @@ -40,6 +42,7 @@ class VoiceNoteProximityWakeLockManager( private val mediaControllerCallback = MediaControllerCallback() private val hardwareSensorEventListener = HardwareSensorEventListener() + private val audioSwitch: AudioSwitch? = if (Build.VERSION.SDK_INT < 31) AudioSwitch(activity.applicationContext) else null private var startTime: Long = -1 @@ -50,12 +53,25 @@ class VoiceNoteProximityWakeLockManager( } override fun onResume(owner: LifecycleOwner) { + if (audioSwitch == null) { + startListening() + } else { + audioSwitch.start { _, selectedAudioDevice -> onFocusedAudioDeviceChanged(selectedAudioDevice) } + } + } + + override fun onPause(owner: LifecycleOwner) { + audioSwitch?.stop() + stopListening() + } + + private fun startListening() { if (proximitySensor != null) { mediaController.registerCallback(mediaControllerCallback) } } - override fun onPause(owner: LifecycleOwner) { + private fun stopListening() { if (proximitySensor != null) { unregisterCallbacksAndRelease() } @@ -68,10 +84,19 @@ class VoiceNoteProximityWakeLockManager( fun unregisterFromLifecycle() { if (proximitySensor != null) { + stopListening() activity.lifecycle.removeObserver(this) } } + private fun onFocusedAudioDeviceChanged(audioDevice: AudioDevice?) { + if (audioDevice is AudioDevice.BluetoothHeadset) { + stopListening() + } else { + startListening() + } + } + private fun isActivityResumed() = activity.lifecycle.currentState.isAtLeast(Lifecycle.State.RESUMED) private fun isPlayerActive() = mediaController.playbackState.state == PlaybackStateCompat.STATE_BUFFERING || diff --git a/dependencies.gradle b/dependencies.gradle index 883bd3b20..b3030279b 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -113,6 +113,7 @@ dependencyResolutionManagement { alias('lottie').to('com.airbnb.android:lottie:3.6.0') alias('stickyheadergrid').to('com.codewaves.stickyheadergrid:stickyheadergrid:0.9.4') alias('dnsjava').to('dnsjava:dnsjava:2.1.9') + alias('audioswitch').to('com.twilio:audioswitch:1.1.4') // Mp4Parser alias('mp4parser-isoparser').to('org.mp4parser', 'isoparser').versionRef('mp4parser') diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2b37bbdba..015f1a486 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -59,6 +59,14 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + + + + + @@ -2127,6 +2135,11 @@ https://docs.gradle.org/current/userguide/dependency_verification.html + + + + +