Passing media quality from Slider to Compressor

setting media quality to MEDIUM where ui has no option for setting it (ChannelScreen, ChatroomScreen, NewUserMetadataViewModel)
This commit is contained in:
David Kaspar
2024-09-05 09:09:10 +02:00
parent 7e4d9fb708
commit fcf5e972d6
8 changed files with 39 additions and 14 deletions
@@ -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)
}
@@ -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),
)
}
}
@@ -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(
@@ -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),
)
}
}
@@ -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,
)
}
@@ -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 {
@@ -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,
@@ -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,