From fcf5e972d6a67afb6acd2bed6216da4ad445e296 Mon Sep 17 00:00:00 2001 From: David Kaspar Date: Thu, 5 Sep 2024 09:09:10 +0200 Subject: [PATCH] Passing media quality from Slider to Compressor setting media quality to MEDIUM where ui has no option for setting it (ChannelScreen, ChatroomScreen, NewUserMetadataViewModel) --- .../amethyst/ui/actions/EditPostView.kt | 4 ++-- .../amethyst/ui/actions/EditPostViewModel.kt | 4 ++-- .../amethyst/ui/actions/NewPostView.kt | 16 ++++++++-------- .../amethyst/ui/actions/NewPostViewModel.kt | 4 ++-- .../ui/actions/NewUserMetadataViewModel.kt | 1 + .../amethyst/ui/components/MediaCompressor.kt | 16 ++++++++++++++++ .../screen/loggedIn/chatrooms/ChannelScreen.kt | 4 ++++ .../screen/loggedIn/chatrooms/ChatroomScreen.kt | 4 ++++ 8 files changed, 39 insertions(+), 14 deletions(-) diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostView.kt index fb6512608..ed92e7a8a 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostView.kt @@ -330,8 +330,8 @@ fun EditPostView( ImageVideoDescription( url, accountViewModel.account.settings.defaultFileServer, - onAdd = { alt, server, sensitiveContent -> - postViewModel.upload(url, alt, sensitiveContent, false, server, accountViewModel::toast, context) + onAdd = { alt, server, sensitiveContent, mediaQuality -> + postViewModel.upload(url, alt, sensitiveContent, mediaQuality, false, server, accountViewModel::toast, context) if (!server.isNip95) { accountViewModel.account.settings.changeDefaultFileServer(server.server) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt index 9886d9cbe..c4aa58e04 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/EditPostViewModel.kt @@ -41,7 +41,6 @@ import com.vitorpamplona.amethyst.model.User import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource -import com.vitorpamplona.amethyst.ui.components.CompressorQuality import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel import com.vitorpamplona.amethyst.ui.stringRes @@ -149,6 +148,7 @@ open class EditPostViewModel : ViewModel() { galleryUri: Uri, alt: String?, sensitiveContent: Boolean, + mediaQuality: Float, isPrivate: Boolean = false, server: ServerOption, onError: (String, String) -> Unit, @@ -224,7 +224,7 @@ open class EditPostViewModel : ViewModel() { isUploadingImage = false onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it)) }, - mediaQuality = CompressorQuality.LOW, + mediaQuality = MediaCompressor().floatToCompressorQuality(mediaQuality), ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt index f143eda1b..d9efc4cf3 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostView.kt @@ -493,8 +493,8 @@ fun NewPostView( ImageVideoDescription( url, accountViewModel.account.settings.defaultFileServer, - onAdd = { alt, server, sensitiveContent -> - postViewModel.upload(url, alt, sensitiveContent, false, server, accountViewModel::toast, context) + onAdd = { alt, server, sensitiveContent, mediaQuality -> + postViewModel.upload(url, alt, sensitiveContent, mediaQuality, false, server, accountViewModel::toast, context) if (!server.isNip95) { accountViewModel.account.settings.changeDefaultFileServer(server.server) } @@ -1610,7 +1610,7 @@ fun CreateButton( fun ImageVideoDescription( uri: Uri, defaultServer: Nip96MediaServers.ServerName, - onAdd: (String, ServerOption, Boolean) -> Unit, + onAdd: (String, ServerOption, Boolean, Float) -> Unit, onCancel: () -> Unit, onError: (Int) -> Unit, accountViewModel: AccountViewModel, @@ -1668,7 +1668,7 @@ fun ImageVideoDescription( } var message by remember { mutableStateOf("") } var sensitiveContent by remember { mutableStateOf(false) } - var sliderPosition by remember { mutableStateOf(1f) } // 0 = Low, 1 = Medium, 2 = High + var mediaQualitySlider by remember { mutableStateOf(1f) } // 0 = Low, 1 = Medium, 2 = High Column( modifier = @@ -1861,15 +1861,15 @@ fun ImageVideoDescription( ) { Column { Slider( - value = sliderPosition, - onValueChange = { sliderPosition = it }, + value = mediaQualitySlider, + onValueChange = { mediaQualitySlider = it }, valueRange = 0f..2f, steps = 1, ) Text( text = - when (sliderPosition.toInt()) { + when (mediaQualitySlider.toInt()) { 0 -> CompressorQuality.LOW.toString() 1 -> CompressorQuality.MEDIUM.toString() 2 -> CompressorQuality.HIGH.toString() @@ -1884,7 +1884,7 @@ fun ImageVideoDescription( Modifier .fillMaxWidth() .padding(vertical = 10.dp), - onClick = { onAdd(message, selectedServer, sensitiveContent) }, + onClick = { onAdd(message, selectedServer, sensitiveContent, mediaQualitySlider) }, shape = QuoteBorder, colors = ButtonDefaults.buttonColors( diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt index 9afd43265..ee3358115 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewPostViewModel.kt @@ -46,7 +46,6 @@ import com.vitorpamplona.amethyst.service.FileHeader import com.vitorpamplona.amethyst.service.LocationUtil import com.vitorpamplona.amethyst.service.Nip96Uploader import com.vitorpamplona.amethyst.service.NostrSearchEventOrUserDataSource -import com.vitorpamplona.amethyst.ui.components.CompressorQuality import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.components.Split import com.vitorpamplona.amethyst.ui.screen.loggedIn.AccountViewModel @@ -835,6 +834,7 @@ open class NewPostViewModel : ViewModel() { galleryUri: Uri, alt: String?, sensitiveContent: Boolean, + mediaQuality: Float, isPrivate: Boolean = false, server: ServerOption, onError: (title: String, message: String) -> Unit, @@ -910,7 +910,7 @@ open class NewPostViewModel : ViewModel() { isUploadingImage = false onError(stringRes(context, R.string.failed_to_upload_media_no_details), stringRes(context, it)) }, - mediaQuality = CompressorQuality.LOW, + mediaQuality = MediaCompressor().floatToCompressorQuality(mediaQuality), ) } } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt index 3ab6bb457..055e24eb5 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/actions/NewUserMetadataViewModel.kt @@ -212,6 +212,7 @@ class NewUserMetadataViewModel : ViewModel() { onError(stringRes(context, R.string.error_when_compressing_media), stringRes(context, it)) }, + // Use MEDIUM quality as default mediaQuality = CompressorQuality.MEDIUM, ) } diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/MediaCompressor.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/MediaCompressor.kt index d2812b07a..4084bbacd 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/MediaCompressor.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/components/MediaCompressor.kt @@ -184,6 +184,22 @@ class MediaCompressor { } return arrayOf(name, extension) } + + fun floatToCompressorQuality(mediaQualityFloat: Float): CompressorQuality = + when (mediaQualityFloat) { + 0f -> CompressorQuality.LOW + 1f -> CompressorQuality.MEDIUM + 2f -> CompressorQuality.HIGH + else -> CompressorQuality.MEDIUM + } + + fun compressorQualityToFloat(compressorQuality: CompressorQuality): Float = + when (compressorQuality) { + CompressorQuality.LOW -> 0f + CompressorQuality.MEDIUM -> 1f + CompressorQuality.HIGH -> 2f + else -> 1f + } } enum class CompressorQuality { diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChannelScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChannelScreen.kt index 5f2695e0d..896de8212 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChannelScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChannelScreen.kt @@ -116,7 +116,9 @@ import com.vitorpamplona.amethyst.ui.actions.NewPostViewModel import com.vitorpamplona.amethyst.ui.actions.ServerOption import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation +import com.vitorpamplona.amethyst.ui.components.CompressorQuality import com.vitorpamplona.amethyst.ui.components.LoadNote +import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.components.RobohashFallbackAsyncImage import com.vitorpamplona.amethyst.ui.components.SensitivityWarning import com.vitorpamplona.amethyst.ui.components.TranslatableRichTextViewer @@ -466,6 +468,8 @@ fun EditFieldRow( galleryUri = it, alt = null, sensitiveContent = false, + // Use MEDIUM quality + mediaQuality = MediaCompressor().compressorQualityToFloat(CompressorQuality.MEDIUM), server = ServerOption(accountViewModel.account.settings.defaultFileServer, false), onError = accountViewModel::toast, context = context, diff --git a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomScreen.kt b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomScreen.kt index 648eb733f..4b007f53c 100644 --- a/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomScreen.kt +++ b/amethyst/src/main/java/com/vitorpamplona/amethyst/ui/screen/loggedIn/chatrooms/ChatroomScreen.kt @@ -92,6 +92,8 @@ import com.vitorpamplona.amethyst.ui.actions.PostButton import com.vitorpamplona.amethyst.ui.actions.ServerOption import com.vitorpamplona.amethyst.ui.actions.UploadFromGallery import com.vitorpamplona.amethyst.ui.actions.UrlUserTagTransformation +import com.vitorpamplona.amethyst.ui.components.CompressorQuality +import com.vitorpamplona.amethyst.ui.components.MediaCompressor import com.vitorpamplona.amethyst.ui.note.ClickableUserPicture import com.vitorpamplona.amethyst.ui.note.IncognitoIconOff import com.vitorpamplona.amethyst.ui.note.IncognitoIconOn @@ -443,6 +445,8 @@ fun PrivateMessageEditFieldRow( galleryUri = it, alt = null, sensitiveContent = false, + // use MEDIUM quality + mediaQuality = MediaCompressor().compressorQualityToFloat(CompressorQuality.MEDIUM), isPrivate = isPrivate, server = ServerOption(accountViewModel.account.settings.defaultFileServer, false), onError = accountViewModel::toast,