Use the Oboe ADM for some custom roms
This commit is contained in:
parent
659e36673b
commit
643f64e181
8 changed files with 60 additions and 15 deletions
|
@ -17,7 +17,6 @@ import org.thoughtcrime.securesms.dependencies.AppDependencies
|
||||||
import org.thoughtcrime.securesms.events.WebRtcViewModel
|
import org.thoughtcrime.securesms.events.WebRtcViewModel
|
||||||
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
||||||
import org.thoughtcrime.securesms.ringrtc.RemotePeer
|
import org.thoughtcrime.securesms.ringrtc.RemotePeer
|
||||||
import org.thoughtcrime.securesms.service.webrtc.RingRtcDynamicConfiguration.getAudioProcessingMethod
|
|
||||||
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState
|
import org.thoughtcrime.securesms.service.webrtc.state.WebRtcServiceState
|
||||||
import org.thoughtcrime.securesms.util.NetworkUtil
|
import org.thoughtcrime.securesms.util.NetworkUtil
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
|
@ -62,8 +61,8 @@ class CallLinkPreJoinActionProcessor(
|
||||||
callLink.credentials.adminPassBytes,
|
callLink.credentials.adminPassBytes,
|
||||||
ByteArray(0),
|
ByteArray(0),
|
||||||
AUDIO_LEVELS_INTERVAL,
|
AUDIO_LEVELS_INTERVAL,
|
||||||
getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal.callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
webRtcInteractor.groupCallObserver
|
webRtcInteractor.groupCallObserver
|
||||||
)
|
)
|
||||||
} catch (e: InvalidInputException) {
|
} catch (e: InvalidInputException) {
|
||||||
|
|
|
@ -53,7 +53,7 @@ public class GroupNetworkUnavailableActionProcessor extends WebRtcActionProcesso
|
||||||
new byte[0],
|
new byte[0],
|
||||||
null,
|
null,
|
||||||
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal().callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
webRtcInteractor.getGroupCallObserver());
|
webRtcInteractor.getGroupCallObserver());
|
||||||
|
|
||||||
return currentState.builder()
|
return currentState.builder()
|
||||||
|
|
|
@ -51,7 +51,7 @@ public class GroupPreJoinActionProcessor extends GroupActionProcessor {
|
||||||
new byte[0],
|
new byte[0],
|
||||||
AUDIO_LEVELS_INTERVAL,
|
AUDIO_LEVELS_INTERVAL,
|
||||||
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal().callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
webRtcInteractor.getGroupCallObserver());
|
webRtcInteractor.getGroupCallObserver());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -102,7 +102,7 @@ public class IncomingCallActionProcessor extends DeviceAwareActionProcessor {
|
||||||
context,
|
context,
|
||||||
videoState.getLockableEglBase().require(),
|
videoState.getLockableEglBase().require(),
|
||||||
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal().callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
videoState.requireLocalSink(),
|
videoState.requireLocalSink(),
|
||||||
callParticipant.getVideoSink(),
|
callParticipant.getVideoSink(),
|
||||||
videoState.requireCamera(),
|
videoState.requireCamera(),
|
||||||
|
|
|
@ -185,7 +185,7 @@ public final class IncomingGroupCallActionProcessor extends DeviceAwareActionPro
|
||||||
new byte[0],
|
new byte[0],
|
||||||
AUDIO_LEVELS_INTERVAL,
|
AUDIO_LEVELS_INTERVAL,
|
||||||
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal().callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
webRtcInteractor.getGroupCallObserver());
|
webRtcInteractor.getGroupCallObserver());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -152,7 +152,7 @@ public class OutgoingCallActionProcessor extends DeviceAwareActionProcessor {
|
||||||
context,
|
context,
|
||||||
videoState.getLockableEglBase().require(),
|
videoState.getLockableEglBase().require(),
|
||||||
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
RingRtcDynamicConfiguration.getAudioProcessingMethod(),
|
||||||
SignalStore.internal().callingEnableOboeAdm(),
|
RingRtcDynamicConfiguration.shouldUseOboeAdm(),
|
||||||
videoState.requireLocalSink(),
|
videoState.requireLocalSink(),
|
||||||
callParticipant.getVideoSink(),
|
callParticipant.getVideoSink(),
|
||||||
videoState.requireCamera(),
|
videoState.requireCamera(),
|
||||||
|
|
|
@ -19,12 +19,19 @@ object RingRtcDynamicConfiguration {
|
||||||
return SignalStore.internal.callingAudioProcessingMethod()
|
return SignalStore.internal.callingAudioProcessingMethod()
|
||||||
}
|
}
|
||||||
|
|
||||||
return when {
|
return if (shouldUseOboeAdm()) {
|
||||||
isHardwareBlocklisted() || isKnownFaultyHardwareImplementation() -> AudioProcessingMethod.ForceSoftwareAec3
|
when {
|
||||||
isSoftwareBlocklisted() -> AudioProcessingMethod.ForceHardware
|
shouldUseSoftwareAecForOboe() -> AudioProcessingMethod.ForceSoftwareAec3
|
||||||
Build.VERSION.SDK_INT < 29 && RemoteConfig.useHardwareAecIfOlderThanApi29 -> AudioProcessingMethod.ForceHardware
|
else -> AudioProcessingMethod.ForceHardware
|
||||||
Build.VERSION.SDK_INT < 29 -> AudioProcessingMethod.ForceSoftwareAec3
|
}
|
||||||
else -> AudioProcessingMethod.ForceHardware
|
} else {
|
||||||
|
when {
|
||||||
|
isHardwareBlocklisted() || isKnownFaultyHardwareImplementation() -> AudioProcessingMethod.ForceSoftwareAec3
|
||||||
|
isSoftwareBlocklisted() -> AudioProcessingMethod.ForceHardware
|
||||||
|
Build.VERSION.SDK_INT < 29 && RemoteConfig.useHardwareAecIfOlderThanApi29 -> AudioProcessingMethod.ForceHardware
|
||||||
|
Build.VERSION.SDK_INT < 29 -> AudioProcessingMethod.ForceSoftwareAec3
|
||||||
|
else -> AudioProcessingMethod.ForceHardware
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,7 +44,7 @@ object RingRtcDynamicConfiguration {
|
||||||
return RemoteConfig.hardwareAecBlocklistModels.asListContains(Build.MODEL)
|
return RemoteConfig.hardwareAecBlocklistModels.asListContains(Build.MODEL)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isKnownFaultyHardwareImplementation(): Boolean {
|
private fun isKnownFaultyHardwareImplementation(): Boolean {
|
||||||
return Build.PRODUCT.contains(KNOWN_ISSUE_ROMS) ||
|
return Build.PRODUCT.contains(KNOWN_ISSUE_ROMS) ||
|
||||||
Build.DISPLAY.contains(KNOWN_ISSUE_ROMS) ||
|
Build.DISPLAY.contains(KNOWN_ISSUE_ROMS) ||
|
||||||
Build.HOST.contains(KNOWN_ISSUE_ROMS)
|
Build.HOST.contains(KNOWN_ISSUE_ROMS)
|
||||||
|
@ -46,4 +53,22 @@ object RingRtcDynamicConfiguration {
|
||||||
private fun isSoftwareBlocklisted(): Boolean {
|
private fun isSoftwareBlocklisted(): Boolean {
|
||||||
return RemoteConfig.softwareAecBlocklistModels.asListContains(Build.MODEL)
|
return RemoteConfig.softwareAecBlocklistModels.asListContains(Build.MODEL)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun shouldUseOboeAdm(): Boolean {
|
||||||
|
if (RemoteConfig.internalUser) {
|
||||||
|
return SignalStore.internal.callingEnableOboeAdm()
|
||||||
|
}
|
||||||
|
|
||||||
|
// For now, only allow the Oboe ADM to be used for custom ROMS.
|
||||||
|
return RemoteConfig.oboeDeployment && isKnownFaultyHardwareImplementation() && !shouldUseJavaAdm()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun shouldUseJavaAdm(): Boolean {
|
||||||
|
return RemoteConfig.useJavaAdmModels.asListContains(Build.MODEL)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun shouldUseSoftwareAecForOboe(): Boolean {
|
||||||
|
return RemoteConfig.useSoftwareAecForOboeModels.asListContains(Build.MODEL)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -716,6 +716,27 @@ object RemoteConfig {
|
||||||
hotSwappable = true
|
hotSwappable = true
|
||||||
)
|
)
|
||||||
|
|
||||||
|
/** Whether the Oboe ADM should be used or not. */
|
||||||
|
val oboeDeployment: Boolean by remoteBoolean(
|
||||||
|
key = "android.calling.oboeDeployment",
|
||||||
|
defaultValue = false,
|
||||||
|
hotSwappable = false
|
||||||
|
)
|
||||||
|
|
||||||
|
/** A comma-separated list of models that should use the Java ADM instead of the Oboe ADM. */
|
||||||
|
val useJavaAdmModels: String by remoteString(
|
||||||
|
key = "android.calling.useJavaAdmList",
|
||||||
|
defaultValue = "",
|
||||||
|
hotSwappable = true
|
||||||
|
)
|
||||||
|
|
||||||
|
/** A comma-separated list of models that should use software AEC for calling with the Oboe ADM. */
|
||||||
|
val useSoftwareAecForOboeModels: String by remoteString(
|
||||||
|
key = "android.calling.useSoftwareAecForOboe",
|
||||||
|
defaultValue = "",
|
||||||
|
hotSwappable = true
|
||||||
|
)
|
||||||
|
|
||||||
/** A comma-separated list of manufacturers that *should* use Telecom for calling. */
|
/** A comma-separated list of manufacturers that *should* use Telecom for calling. */
|
||||||
val telecomManufacturerAllowList: String by remoteString(
|
val telecomManufacturerAllowList: String by remoteString(
|
||||||
key = "android.calling.telecomAllowList",
|
key = "android.calling.telecomAllowList",
|
||||||
|
|
Loading…
Add table
Reference in a new issue