Make audio removal available for all users.

This commit is contained in:
Greyson Parrelli
2026-08-10 16:32:57 -04:00
parent 6f34518218
commit 1fd343df93
10 changed files with 5 additions and 33 deletions
@@ -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
}
@@ -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)) }
)
}
}
}
}
@@ -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
)
@@ -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
)
}
}
@@ -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<Boolean>.falseForExternalUsers(): SignalStoreValueDelegate<Boolean> {
return this.map { actualValue -> RemoteConfig.internalUser && actualValue }
}
@@ -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)
}
+1 -1
View File
@@ -6418,7 +6418,7 @@
<!-- Accessibility label describing the change media quality button on the Media review screen -->
<string name="MediaReviewFragment__change_media_quality_accessibility_label">Change Media Quality</string>
<!-- Accessibility label describing the mute video audio button on the Media review screen -->
<string name="MediaReviewFragment__mute_video_audio_accessibility_label" translatable="false">Mute Video Audio (Labs)</string>
<string name="MediaReviewFragment__mute_video_audio_accessibility_label">Mute Video Audio</string>
<!-- Accessibility label describing the save media button on the Media review screen -->
<string name="MediaReviewFragment__save_media_accessibility_label">Save Media</string>
<!-- Accessibility label describing the toggle emoji keyboard button on the Media review screen -->
@@ -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();
}
}
@@ -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 {
@@ -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
}
/**