Add persistent state save for send quality to media send module.

This commit is contained in:
Alex Hart
2026-08-03 14:21:39 -03:00
parent 48040362e6
commit 476ee40d5f
4 changed files with 21 additions and 1 deletions
@@ -90,6 +90,12 @@ object MediaSendV3Repository : MediaSendRepository {
SignalStore.misc.isCameraFacingFront = value
}
override var sentMediaQuality: SentMediaQuality
get() = SignalStore.settings.sentMediaQuality
set(value) {
SignalStore.settings.sentMediaQuality = value
}
override suspend fun getFolders(): List<MediaFolder> = suspendCancellableCoroutine { continuation ->
mediaRepository.getFolders(appContext) { folders ->
continuation.resume(folders)
@@ -59,6 +59,11 @@ interface MediaSendRepository {
*/
suspend fun deleteBlobs(media: List<Media>)
/**
* User's sent-media-quality setting, backed by persistent storage.
*/
var sentMediaQuality: SentMediaQuality
/**
* Whether the user has opted out of the warning shown before media is written to shared device storage.
*/
@@ -43,7 +43,7 @@ data class MediaSendState(
val focusedMedia: Media? = null,
val isMeteredConnection: Boolean = false,
val isPreUploadEnabled: Boolean = false,
val sentMediaQuality: SentMediaQuality = SentMediaQuality.STANDARD,
val sentMediaQuality: @WriteWith<TransientSentMediaQualityParceler> SentMediaQuality = MediaSendDependencies.mediaSendRepository.sentMediaQuality,
/**
* Per-media editor state keyed by URI (video trim data, image editor data, etc.).
*/
@@ -190,6 +190,14 @@ data class MediaSendState(
override fun MediaConstraints.write(parcel: Parcel, flags: Int) = Unit
}
/**
* The repository is the source of truth: every toggle writes through to it, so the value is re-read rather than saved.
*/
private object TransientSentMediaQualityParceler : Parceler<SentMediaQuality> {
override fun create(parcel: Parcel): SentMediaQuality = MediaSendDependencies.mediaSendRepository.sentMediaQuality
override fun SentMediaQuality.write(parcel: Parcel, flags: Int) = Unit
}
enum class ViewOnceToggleState(val code: Int) {
OFF(0),
ONCE(1);
@@ -763,6 +763,7 @@ class MediaSendViewModel(
if (snapshot.sentMediaQuality == sentMediaQuality) return
updateState { copy(sentMediaQuality = sentMediaQuality, isPreUploadEnabled = false) }
repository.sentMediaQuality = sentMediaQuality
preUploadController.cancelAllUploads()
// Re-clamp video durations based on new quality