From 1fd343df93e58555fc45caa9354568072ef918e9 Mon Sep 17 00:00:00 2001 From: Greyson Parrelli Date: Mon, 10 Aug 2026 16:26:49 -0400 Subject: [PATCH] Make audio removal available for all users. --- .../components/settings/app/labs/LabsSettingsEvents.kt | 1 - .../components/settings/app/labs/LabsSettingsFragment.kt | 9 --------- .../components/settings/app/labs/LabsSettingsState.kt | 3 +-- .../settings/app/labs/LabsSettingsViewModel.kt | 7 +------ .../org/thoughtcrime/securesms/keyvalue/LabsValues.kt | 3 --- .../securesms/mediasend/v3/MediaSendV3Repository.kt | 3 --- app/src/main/res/values/strings.xml | 2 +- .../main/java/org/signal/mediasend/MediaConstraints.java | 2 +- .../main/java/org/signal/mediasend/MediaSendFlowState.kt | 2 +- .../java/org/signal/mediasend/MediaSendRepository.kt | 6 ------ 10 files changed, 5 insertions(+), 33 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt index 818fb8ae97..fa36d0f7b6 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsEvents.kt @@ -14,5 +14,4 @@ sealed interface LabsSettingsEvents { data class ToggleStickerReplies(val enabled: Boolean) : LabsSettingsEvents data class ToggleMuteBreakthroughNotifications(val enabled: Boolean) : LabsSettingsEvents data class ToggleImprovedMessageDeletion(val enabled: Boolean) : LabsSettingsEvents - data class ToggleMuteVideoAudio(val enabled: Boolean) : LabsSettingsEvents } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt index b825511fd1..03ed443ad9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsFragment.kt @@ -160,15 +160,6 @@ private fun LabsSettingsContent( onCheckChanged = { onEvent(LabsSettingsEvents.ToggleImprovedMessageDeletion(it)) } ) } - - item { - Rows.ToggleRow( - checked = state.muteVideoAudio, - text = "Mute Video Audio", - label = "Adds a button to the video editor that removes the audio track from a video before sending it.", - onCheckChanged = { onEvent(LabsSettingsEvents.ToggleMuteVideoAudio(it)) } - ) - } } } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt index f584298ebf..03bbeb60d9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsState.kt @@ -16,6 +16,5 @@ data class LabsSettingsState( val starredMessages: Boolean = false, val stickerReplies: Boolean = false, val muteBreakthroughNotifications: Boolean = false, - val improvedMessageDeletion: Boolean = false, - val muteVideoAudio: Boolean = false + val improvedMessageDeletion: Boolean = false ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt index eea0c32823..432de19dd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/labs/LabsSettingsViewModel.kt @@ -49,10 +49,6 @@ class LabsSettingsViewModel : ViewModel() { SignalStore.labs.improvedMessageDeletion = event.enabled _state.value = _state.value.copy(improvedMessageDeletion = event.enabled) } - is LabsSettingsEvents.ToggleMuteVideoAudio -> { - SignalStore.labs.muteVideoAudio = event.enabled - _state.value = _state.value.copy(muteVideoAudio = event.enabled) - } } } @@ -65,8 +61,7 @@ class LabsSettingsViewModel : ViewModel() { starredMessages = SignalStore.labs.starredMessages, stickerReplies = SignalStore.labs.stickerReplies, muteBreakthroughNotifications = SignalStore.labs.muteBreakthroughNotifications, - improvedMessageDeletion = SignalStore.labs.improvedMessageDeletion, - muteVideoAudio = SignalStore.labs.muteVideoAudio + improvedMessageDeletion = SignalStore.labs.improvedMessageDeletion ) } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt index 8a40f0b016..a05db3074c 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/LabsValues.kt @@ -12,7 +12,6 @@ class LabsValues internal constructor(store: KeyValueStore) : SignalStoreValues( const val STICKER_REPLIES: String = "labs.sticker_replies" const val MUTE_BREAKTHROUGH_NOTIFICATIONS: String = "labs.mute_breakthrough_notifications" const val IMPROVED_MESSAGE_DELETION: String = "labs.improved_message_deletion" - const val MUTE_VIDEO_AUDIO: String = "labs.mute_video_audio" } public override fun onFirstEverAppLaunch() = Unit @@ -35,8 +34,6 @@ class LabsValues internal constructor(store: KeyValueStore) : SignalStoreValues( var improvedMessageDeletion by booleanValue(IMPROVED_MESSAGE_DELETION, true).falseForExternalUsers() - var muteVideoAudio by booleanValue(MUTE_VIDEO_AUDIO, true).falseForExternalUsers() - private fun SignalStoreValueDelegate.falseForExternalUsers(): SignalStoreValueDelegate { return this.map { actualValue -> RemoteConfig.internalUser && actualValue } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt index 2ae6342ce3..f0d9447dc2 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v3/MediaSendV3Repository.kt @@ -329,9 +329,6 @@ object MediaSendV3Repository : MediaSendRepository { SignalStore.imageEditor.setBlurPercentage((value.blur * 100).roundToInt()) } - override val isMuteVideoAudioLabsEnabled: Boolean - get() = SignalStore.labs.muteVideoAudio - private fun PreUploadResult.toLegacyPreUploadResult(): MessageSender.PreUploadResult { return MessageSender.PreUploadResult(media, AttachmentId(attachmentId), jobIds) } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 49d8967a58..580ecf20b1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -6418,7 +6418,7 @@ Change Media Quality - Mute Video Audio (Labs) + Mute Video Audio Save Media diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaConstraints.java b/feature/media-send/src/main/java/org/signal/mediasend/MediaConstraints.java index 814ce8219b..de3b9c7cf8 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaConstraints.java +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaConstraints.java @@ -105,6 +105,6 @@ public abstract class MediaConstraints { * Stripping the audio track means re-encoding the video, so the control is only offered where that is possible. */ public static boolean isMuteVideoAudioAvailable() { - return MediaSendDependencies.INSTANCE.getMediaSendRepository().isMuteVideoAudioLabsEnabled() && isVideoTranscodeAvailable(); + return isVideoTranscodeAvailable(); } } diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowState.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowState.kt index 37f578b423..4bf93fbe25 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowState.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendFlowState.kt @@ -140,7 +140,7 @@ data class MediaSendFlowState( val brushWidths: BrushWidths = MediaSendDependencies.mediaSendRepository.brushWidths, /** - * Whether the labs-gated control for stripping a video's audio track is available. + * Whether the control for stripping a video's audio track is available. */ val isMuteVideoAudioEnabled: Boolean = MediaConstraints.isMuteVideoAudioAvailable() ) : Parcelable { diff --git a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt index 2dea873f5b..a6293769d6 100644 --- a/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt +++ b/feature/media-send/src/main/java/org/signal/mediasend/MediaSendRepository.kt @@ -153,12 +153,6 @@ interface MediaSendRepository { * The image editor's per-tool brush widths, shared with the v2 editor. */ var brushWidths: BrushWidths - - /** - * Whether the labs flag for stripping a video's audio track before sending is on. Callers should ask - * [MediaConstraints.isMuteVideoAudioAvailable] instead, which also accounts for transcode support. - */ - val isMuteVideoAudioLabsEnabled: Boolean } /**