From 72e547228def59cd519c2f040d535538435fe262 Mon Sep 17 00:00:00 2001 From: Mysochenko Yuriy Date: Wed, 4 May 2022 13:18:04 +0300 Subject: [PATCH 1/3] disable proximity sensor while external speaker is enabled --- .../dialer/activities/CallActivity.kt | 8 ++--- .../dialer/extensions/AudioManager.kt | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index 08d903e5..5e41097d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -22,10 +22,7 @@ import com.simplemobiletools.commons.helpers.isOreoMr1Plus import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.dialer.App import com.simplemobiletools.dialer.R -import com.simplemobiletools.dialer.extensions.addCharacter -import com.simplemobiletools.dialer.extensions.audioManager -import com.simplemobiletools.dialer.extensions.config -import com.simplemobiletools.dialer.extensions.getHandleToUse +import com.simplemobiletools.dialer.extensions.* import com.simplemobiletools.dialer.helpers.CallContactAvatarHelper import com.simplemobiletools.dialer.helpers.CallManager import com.simplemobiletools.dialer.models.CallContact @@ -466,7 +463,8 @@ class CallActivity : SimpleActivity() { } private fun initProximitySensor() { - if (!config.disableProximitySensor && (proximityWakeLock == null || proximityWakeLock?.isHeld == false)) { + if (!audioManager.hasExternalSpeaker() && !config.disableProximitySensor && + (proximityWakeLock == null || proximityWakeLock?.isHeld == false)) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager proximityWakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "com.simplemobiletools.dialer.pro:wake_lock") proximityWakeLock!!.acquire(60 * MINUTE_SECONDS * 1000L) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt new file mode 100644 index 00000000..10c0f46d --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt @@ -0,0 +1,33 @@ +package com.simplemobiletools.dialer.extensions + +import android.media.AudioDeviceInfo +import android.media.AudioManager +import com.simplemobiletools.commons.helpers.isOreoPlus +import com.simplemobiletools.commons.helpers.isSPlus + +fun AudioManager.hasExternalSpeaker(): Boolean { + val audioDevices = getDevices(AudioManager.GET_DEVICES_INPUTS) + if (isSPlus()) { + if (audioDevices.find { + it.type == AudioDeviceInfo.TYPE_BLE_HEADSET || + it.type == AudioDeviceInfo.TYPE_BLE_SPEAKER + } != null) { + return true + } + } + if (isOreoPlus()) { + if (audioDevices.find { + it.type == AudioDeviceInfo.TYPE_USB_HEADSET + } != null) { + return true + } + } + if (audioDevices.find { + it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || + it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO || + it.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP + } != null) { + return true + } + return false +} From 0881127f9a4b13a07a638ec1af371018607376be Mon Sep 17 00:00:00 2001 From: Mysochenko Yuriy Date: Wed, 4 May 2022 21:14:20 +0300 Subject: [PATCH 2/3] toggle proximity sensor with the external speaker --- .../dialer/activities/CallActivity.kt | 29 +++++++++------- .../dialer/extensions/AudioManager.kt | 33 ------------------- 2 files changed, 18 insertions(+), 44 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index 5e41097d..a0d02314 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -77,9 +77,7 @@ class CallActivity : SimpleActivity() { override fun onDestroy() { super.onDestroy() CallManager.unregisterCallback(callCallback) - if (proximityWakeLock?.isHeld == true) { - proximityWakeLock!!.release() - } + disableProximitySensor() } override fun onBackPressed() { @@ -280,6 +278,12 @@ class CallActivity : SimpleActivity() { val newRoute = if (isSpeakerOn) CallAudioState.ROUTE_SPEAKER else CallAudioState.ROUTE_EARPIECE CallManager.inCallService?.setAudioRoute(newRoute) call_toggle_speaker.contentDescription = getString(if (isSpeakerOn) R.string.turn_speaker_off else R.string.turn_speaker_on) + + if (isSpeakerOn) { + disableProximitySensor() + } else { + enableProximitySensor() + } } private fun toggleMicrophone() { @@ -373,7 +377,7 @@ class CallActivity : SimpleActivity() { } private fun initOutgoingCallUI() { - initProximitySensor() + enableProximitySensor() incoming_call_holder.beGone() ongoing_call_holder.beVisible() } @@ -383,7 +387,7 @@ class CallActivity : SimpleActivity() { } private fun callStarted() { - initProximitySensor() + enableProximitySensor() incoming_call_holder.beGone() ongoing_call_holder.beVisible() callDurationHelper.onDurationChange { @@ -406,9 +410,7 @@ class CallActivity : SimpleActivity() { private fun endCall() { CallManager.reject() - if (proximityWakeLock?.isHeld == true) { - proximityWakeLock!!.release() - } + disableProximitySensor() if (isCallEnded) { finishAndRemoveTask() @@ -462,12 +464,17 @@ class CallActivity : SimpleActivity() { } } - private fun initProximitySensor() { - if (!audioManager.hasExternalSpeaker() && !config.disableProximitySensor && - (proximityWakeLock == null || proximityWakeLock?.isHeld == false)) { + private fun enableProximitySensor() { + if (!config.disableProximitySensor && (proximityWakeLock == null || proximityWakeLock?.isHeld == false)) { val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager proximityWakeLock = powerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "com.simplemobiletools.dialer.pro:wake_lock") proximityWakeLock!!.acquire(60 * MINUTE_SECONDS * 1000L) } } + + private fun disableProximitySensor() { + if (proximityWakeLock?.isHeld == true) { + proximityWakeLock!!.release() + } + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt deleted file mode 100644 index 10c0f46d..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/extensions/AudioManager.kt +++ /dev/null @@ -1,33 +0,0 @@ -package com.simplemobiletools.dialer.extensions - -import android.media.AudioDeviceInfo -import android.media.AudioManager -import com.simplemobiletools.commons.helpers.isOreoPlus -import com.simplemobiletools.commons.helpers.isSPlus - -fun AudioManager.hasExternalSpeaker(): Boolean { - val audioDevices = getDevices(AudioManager.GET_DEVICES_INPUTS) - if (isSPlus()) { - if (audioDevices.find { - it.type == AudioDeviceInfo.TYPE_BLE_HEADSET || - it.type == AudioDeviceInfo.TYPE_BLE_SPEAKER - } != null) { - return true - } - } - if (isOreoPlus()) { - if (audioDevices.find { - it.type == AudioDeviceInfo.TYPE_USB_HEADSET - } != null) { - return true - } - } - if (audioDevices.find { - it.type == AudioDeviceInfo.TYPE_WIRED_HEADSET || - it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO || - it.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP - } != null) { - return true - } - return false -} From 230c569f8d0e0dd7e03f3cb06709394807074e6b Mon Sep 17 00:00:00 2001 From: Mysochenko Yuriy Date: Wed, 4 May 2022 21:15:58 +0300 Subject: [PATCH 3/3] fix imports --- .../com/simplemobiletools/dialer/activities/CallActivity.kt | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt index a0d02314..efd276bb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/dialer/activities/CallActivity.kt @@ -22,7 +22,10 @@ import com.simplemobiletools.commons.helpers.isOreoMr1Plus import com.simplemobiletools.commons.helpers.isOreoPlus import com.simplemobiletools.dialer.App import com.simplemobiletools.dialer.R -import com.simplemobiletools.dialer.extensions.* +import com.simplemobiletools.dialer.extensions.addCharacter +import com.simplemobiletools.dialer.extensions.audioManager +import com.simplemobiletools.dialer.extensions.config +import com.simplemobiletools.dialer.extensions.getHandleToUse import com.simplemobiletools.dialer.helpers.CallContactAvatarHelper import com.simplemobiletools.dialer.helpers.CallManager import com.simplemobiletools.dialer.models.CallContact