Fix poor calling audio on certain devices.

This commit is contained in:
Cody Henthorne 2024-01-17 12:38:05 -05:00 committed by Greyson Parrelli
parent c41795e7f0
commit 3e001ddf1b
2 changed files with 10 additions and 14 deletions

View file

@ -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)
}

View file

@ -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.
*/