From 3e001ddf1b958590d435371fd4969c41ef355f58 Mon Sep 17 00:00:00 2001 From: Cody Henthorne Date: Wed, 17 Jan 2024 12:38:05 -0500 Subject: [PATCH] Fix poor calling audio on certain devices. --- .../webrtc/RingRtcDynamicConfiguration.kt | 16 ++++++++++------ .../securesms/util/FeatureFlags.java | 8 -------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/RingRtcDynamicConfiguration.kt b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/RingRtcDynamicConfiguration.kt index 96a5666577..d4011a23e1 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/RingRtcDynamicConfiguration.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/service/webrtc/RingRtcDynamicConfiguration.kt @@ -11,21 +11,19 @@ import org.thoughtcrime.securesms.util.FeatureFlags */ object RingRtcDynamicConfiguration { + private val KNOWN_ISSUE_ROMS = "(lineage|calyxos)".toRegex(RegexOption.IGNORE_CASE) + @JvmStatic fun getAudioProcessingMethod(): AudioProcessingMethod { if (SignalStore.internalValues().callingAudioProcessingMethod() != AudioProcessingMethod.Default) { return SignalStore.internalValues().callingAudioProcessingMethod() } - val useAec3: Boolean = FeatureFlags.useAec3() - return when { - isHardwareBlocklisted() && useAec3 -> AudioProcessingMethod.ForceSoftwareAec3 - isHardwareBlocklisted() -> AudioProcessingMethod.ForceSoftwareAecM + isHardwareBlocklisted() || isKnownFaultyHardwareImplementation() -> AudioProcessingMethod.ForceSoftwareAec3 isSoftwareBlocklisted() -> AudioProcessingMethod.ForceHardware Build.VERSION.SDK_INT < 29 && FeatureFlags.useHardwareAecIfOlderThanApi29() -> AudioProcessingMethod.ForceHardware - Build.VERSION.SDK_INT < 29 && useAec3 -> AudioProcessingMethod.ForceSoftwareAec3 - Build.VERSION.SDK_INT < 29 -> AudioProcessingMethod.ForceSoftwareAecM + Build.VERSION.SDK_INT < 29 -> AudioProcessingMethod.ForceSoftwareAec3 else -> AudioProcessingMethod.ForceHardware } } @@ -39,6 +37,12 @@ object RingRtcDynamicConfiguration { return FeatureFlags.hardwareAecBlocklistModels().asListContains(Build.MODEL) } + fun isKnownFaultyHardwareImplementation(): Boolean { + return Build.PRODUCT.contains(KNOWN_ISSUE_ROMS) || + Build.DISPLAY.contains(KNOWN_ISSUE_ROMS) || + Build.HOST.contains(KNOWN_ISSUE_ROMS) + } + private fun isSoftwareBlocklisted(): Boolean { return FeatureFlags.softwareAecBlocklistModels().asListContains(Build.MODEL) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index 36c6ce2e1c..d9c6572cde 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -82,7 +82,6 @@ public final class FeatureFlags { private static final String HARDWARE_AEC_BLOCKLIST_MODELS = "android.calling.hardwareAecBlockList"; private static final String SOFTWARE_AEC_BLOCKLIST_MODELS = "android.calling.softwareAecBlockList"; private static final String USE_HARDWARE_AEC_IF_OLD = "android.calling.useHardwareAecIfOlderThanApi29"; - private static final String USE_AEC3 = "android.calling.useAec3"; private static final String PAYMENTS_COUNTRY_BLOCKLIST = "global.payments.disabledRegions"; public static final String PHONE_NUMBER_PRIVACY = "android.pnp"; public static final String BLOCK_SSE = "android.blockSessionSwitchoverEvents"; @@ -154,7 +153,6 @@ public final class FeatureFlags { HARDWARE_AEC_BLOCKLIST_MODELS, SOFTWARE_AEC_BLOCKLIST_MODELS, USE_HARDWARE_AEC_IF_OLD, - USE_AEC3, PAYMENTS_COUNTRY_BLOCKLIST, STORIES_AUTO_DOWNLOAD_MAXIMUM, TELECOM_MANUFACTURER_ALLOWLIST, @@ -240,7 +238,6 @@ public final class FeatureFlags { HARDWARE_AEC_BLOCKLIST_MODELS, SOFTWARE_AEC_BLOCKLIST_MODELS, USE_HARDWARE_AEC_IF_OLD, - USE_AEC3, PAYMENTS_COUNTRY_BLOCKLIST, TELECOM_MANUFACTURER_ALLOWLIST, TELECOM_MODEL_BLOCKLIST, @@ -517,11 +514,6 @@ public final class FeatureFlags { return getBoolean(USE_HARDWARE_AEC_IF_OLD, false); } - /** Whether or not {@link org.signal.ringrtc.CallManager.AudioProcessingMethod#ForceSoftwareAec3} can be used */ - public static boolean useAec3() { - return getBoolean(USE_AEC3, true); - } - /** * Prefetch count for stories from a given user. */