Merge pull request #1074 from davotoula/add-media-compression-level-uncompressed

Add media compression level uncompressed
This commit is contained in:
Vitor Pamplona 2024-09-12 08:02:51 -04:00 committed by GitHub
commit 74725235b7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 130 additions and 102 deletions

View File

@ -126,7 +126,7 @@ class Nip05NostrAddressVerifier {
val hexKey = nip05url?.get("names")?.get(user)?.asText()
if (hexKey == null) {
onError("Username not found in the NIP05 JSON")
onError("Username not found in the NIP05 JSON [$nip05]")
} else {
onSuccess(hexKey)
}

View File

@ -105,7 +105,9 @@ fun NewMediaView(
var showRelaysDialog by remember { mutableStateOf(false) }
var relayList = remember { accountViewModel.account.activeWriteRelays().toImmutableList() }
var mediaQualitySlider by remember { mutableIntStateOf(1) } // 0 = Low, 1 = Medium, 2 = High
// 0 = Low, 1 = Medium, 2 = High, 3=UNCOMPRESSED
var mediaQualitySlider by remember { mutableIntStateOf(1) }
Dialog(
onDismissRequest = { onClose() },
@ -208,7 +210,7 @@ fun NewMediaView(
text = stringRes(context, R.string.media_compression_quality_explainer),
style = MaterialTheme.typography.bodySmall,
color = Color.Gray,
maxLines = 4,
maxLines = 5,
overflow = TextOverflow.Ellipsis,
)
}
@ -225,6 +227,7 @@ fun NewMediaView(
0 -> stringRes(R.string.media_compression_quality_low)
1 -> stringRes(R.string.media_compression_quality_medium)
2 -> stringRes(R.string.media_compression_quality_high)
3 -> stringRes(R.string.media_compression_quality_uncompressed)
else -> stringRes(R.string.media_compression_quality_medium)
},
modifier = Modifier.align(Alignment.Center),
@ -234,8 +237,8 @@ fun NewMediaView(
Slider(
value = mediaQualitySlider.toFloat(),
onValueChange = { mediaQualitySlider = it.toInt() },
valueRange = 0f..2f,
steps = 1,
valueRange = 0f..3f,
steps = 2,
)
}
}

View File

@ -1735,7 +1735,9 @@ fun ImageVideoDescription(
}
var message by remember { mutableStateOf("") }
var sensitiveContent by remember { mutableStateOf(false) }
var mediaQualitySlider by remember { mutableIntStateOf(1) } // 0 = Low, 1 = Medium, 2 = High
// 0 = Low, 1 = Medium, 2 = High, 3=UNCOMPRESSED
var mediaQualitySlider by remember { mutableIntStateOf(1) }
Column(
modifier =
@ -1935,7 +1937,7 @@ fun ImageVideoDescription(
text = stringRes(R.string.media_compression_quality_explainer),
style = MaterialTheme.typography.bodySmall,
color = Color.Gray,
maxLines = 4,
maxLines = 5,
overflow = TextOverflow.Ellipsis,
)
}
@ -1953,6 +1955,7 @@ fun ImageVideoDescription(
0 -> stringRes(R.string.media_compression_quality_low)
1 -> stringRes(R.string.media_compression_quality_medium)
2 -> stringRes(R.string.media_compression_quality_high)
3 -> stringRes(R.string.media_compression_quality_uncompressed)
else -> stringRes(R.string.media_compression_quality_medium)
},
modifier = Modifier.align(Alignment.Center),
@ -1962,8 +1965,8 @@ fun ImageVideoDescription(
Slider(
value = mediaQualitySlider.toFloat(),
onValueChange = { mediaQualitySlider = it.toInt() },
valueRange = 0f..2f,
steps = 1,
valueRange = 0f..3f,
steps = 2,
)
}
}

View File

@ -49,6 +49,7 @@ class MediaCompressor {
onError: (Int) -> Unit,
mediaQuality: CompressorQuality,
) {
if (mediaQuality != CompressorQuality.UNCOMPRESSED) {
checkNotInMainThread()
if (contentType?.startsWith("video", true) == true) {
@ -59,6 +60,7 @@ class MediaCompressor {
CompressorQuality.MEDIUM -> VideoQuality.MEDIUM
CompressorQuality.HIGH -> VideoQuality.HIGH
CompressorQuality.VERY_HIGH -> VideoQuality.VERY_HIGH
else -> VideoQuality.MEDIUM // dodgy
}
Log.d("MediaCompressor", "Using video compression $mediaQuality")
VideoCompressor.start(
@ -85,7 +87,8 @@ class MediaCompressor {
override fun onProgress(
index: Int,
percent: Float,
) {}
) {
}
override fun onStart(index: Int) {
// Compression start
@ -97,8 +100,10 @@ class MediaCompressor {
path: String?,
) {
if (path != null) {
Log.d("MediaCompressor", "Video compression success. Compressed size [$size]")
onReady(Uri.fromFile(File(path)), contentType, size)
} else {
Log.d("MediaCompressor", "Video compression successful, but returned null path")
onError(R.string.compression_returned_null)
}
}
@ -108,6 +113,7 @@ class MediaCompressor {
failureMessage: String,
) {
// keeps going with original video
Log.d("MediaCompressor", "Video compression failed: $failureMessage")
onReady(uri, contentType, null)
}
@ -128,15 +134,19 @@ class MediaCompressor {
CompressorQuality.MEDIUM -> 60
CompressorQuality.HIGH -> 80
CompressorQuality.VERY_HIGH -> 90
else -> 60
}
try {
Log.d("MediaCompressor", "Using image compression $mediaQuality")
val tempFile = from(uri, contentType, applicationContext)
val compressedImageFile =
Compressor.compress(applicationContext, from(uri, contentType, applicationContext)) {
Compressor.compress(applicationContext, tempFile) {
default(width = 640, format = Bitmap.CompressFormat.JPEG, quality = imageQuality)
}
Log.d("MediaCompressor", "Image compression success. Original size [${tempFile.length()}], new size [${compressedImageFile.length()}]")
onReady(compressedImageFile.toUri(), contentType, compressedImageFile.length())
} catch (e: Exception) {
Log.d("MediaCompressor", "Image compression failed: ${e.message}")
if (e is CancellationException) throw e
e.printStackTrace()
onReady(uri, contentType, null)
@ -144,6 +154,10 @@ class MediaCompressor {
} else {
onReady(uri, contentType, null)
}
} else {
Log.d("MediaCompressor", "UNCOMPRESSED quality selected, skip compression and continue with original media.")
onReady(uri, contentType, null)
}
}
fun from(
@ -188,6 +202,7 @@ class MediaCompressor {
0 -> CompressorQuality.LOW
1 -> CompressorQuality.MEDIUM
2 -> CompressorQuality.HIGH
3 -> CompressorQuality.UNCOMPRESSED
else -> CompressorQuality.MEDIUM
}
@ -196,6 +211,7 @@ class MediaCompressor {
CompressorQuality.LOW -> 0
CompressorQuality.MEDIUM -> 1
CompressorQuality.HIGH -> 2
CompressorQuality.UNCOMPRESSED -> 3
else -> 1
}
}
@ -206,4 +222,5 @@ enum class CompressorQuality {
MEDIUM,
HIGH,
VERY_HIGH,
UNCOMPRESSED,
}

View File

@ -667,10 +667,11 @@
<string name="compression_cancelled">Komprese zrušena</string>
<string name="compression_returned_null">Komprese se nepodařilo vrátit soubor</string>
<string name="media_compression_quality_label">Kvalita médií</string>
<string name="media_compression_quality_explainer">Vyberte Nízkou kvalitu pro kompresi médií na menší soubor s nižší kvalitou, nebo vyberte Vysokou kvalitu pro kompresi na větší soubor s vyšší kvalitou.</string>
<string name="media_compression_quality_explainer">Vyberte Nízkou kvalitu pro kompresi médií na menší soubor s nižší kvalitou, Vysokou kvalitu pro kompresi na větší soubor s vyšší kvalitou, nebo "Bez komprese" pro nahrání médií bez komprese.</string>
<string name="media_compression_quality_low">Nízká</string>
<string name="media_compression_quality_medium">Střední</string>
<string name="media_compression_quality_high">Vysoká</string>
<string name="media_compression_quality_uncompressed">Bez komprese</string>
<string name="edit_draft">Upravit koncept</string>
<string name="login_with_qr_code">Přihlášení pomocí QR kódu</string>
<string name="route">Trasa</string>

View File

@ -672,10 +672,11 @@ anz der Bedingungen ist erforderlich</string>
<string name="compression_cancelled">Komprimierung abgebrochen</string>
<string name="compression_returned_null">Komprimierung fehlgeschlagen eine Datei zurückzugeben</string>
<string name="media_compression_quality_label">Medienqualität</string>
<string name="media_compression_quality_explainer">Wählen Sie Niedrige Qualität, um Ihre Medien in eine kleinere Datei mit geringerer Qualität zu komprimieren, oder wählen Sie Hohe Qualität, um sie in eine größere Datei mit höherer Qualität zu komprimieren.</string>
<string name="media_compression_quality_explainer">Wählen Sie Niedrige Qualität, um Ihre Medien in eine kleinere Datei mit geringerer Qualität zu komprimieren, Hohe Qualität, um sie in eine größere Datei mit höherer Qualität zu komprimieren, oder "Ohne Kompression", um die Medien ohne Kompression hochzuladen.</string>
<string name="media_compression_quality_low">Niedrig</string>
<string name="media_compression_quality_medium">Mittel</string>
<string name="media_compression_quality_high">Hoch</string>
<string name="media_compression_quality_uncompressed">Ohne Kompression</string>
<string name="edit_draft">Entwurf bearbeiten</string>
<string name="login_with_qr_code">Einloggen mit QR-Code</string>
<string name="route">Route</string>

View File

@ -667,10 +667,11 @@
<string name="compression_cancelled">Compressão cancelada</string>
<string name="compression_returned_null">Compressão falhou ao retornar um arquivo</string>
<string name="media_compression_quality_label">Qualidade de Mídia</string>
<string name="media_compression_quality_explainer">Selecione Baixa qualidade para comprimir sua mídia para um arquivo menor com menor qualidade ou selecione Alta qualidade para comprimir para um arquivo maior com maior qualidade.</string>
<string name="media_compression_quality_explainer">Selecione Baixa qualidade para comprimir sua mídia para um arquivo menor com menor qualidade, Alta qualidade para comprimir para um arquivo maior com maior qualidade ou "Sem compressão" para carregar a mídia sem compressão.</string>
<string name="media_compression_quality_low">Baixa</string>
<string name="media_compression_quality_medium">Média</string>
<string name="media_compression_quality_high">Alta</string>
<string name="media_compression_quality_uncompressed">Sem compressão</string>
<string name="edit_draft">Editar rascunho</string>
<string name="login_with_qr_code">Entrar com Código QR</string>
<string name="route">Rota</string>

View File

@ -666,10 +666,11 @@
<string name="compression_cancelled">Komprimering avbruten</string>
<string name="compression_returned_null">Komprimering misslyckades att returnera en fil</string>
<string name="media_compression_quality_label">Mediakvalitet</string>
<string name="media_compression_quality_explainer">Välj Låg kvalitet för att komprimera ditt media till en mindre fil med lägre kvalitet, eller välj Hög kvalitet för att komprimera till en större fil med högre kvalitet.</string>
<string name="media_compression_quality_explainer">Välj Låg kvalitet för att komprimera ditt media till en mindre fil med lägre kvalitet, Hög kvalitet för att komprimera till en större fil med högre kvalitet eller Okomprimerad för att ladda upp media utan kompression.</string>
<string name="media_compression_quality_low">Låg</string>
<string name="media_compression_quality_medium">Medel</string>
<string name="media_compression_quality_high">Hög</string>
<string name="media_compression_quality_uncompressed">Okomprimerad</string>
<string name="edit_draft">Redigera utkast</string>
<string name="login_with_qr_code">Logga in med QR-kod</string>
<string name="route">Rutt</string>

View File

@ -794,10 +794,11 @@
<string name="compression_returned_null">Compression failed to return a file</string>
<string name="media_compression_quality_label">Media Quality</string>
<string name="media_compression_quality_explainer">Select Low quality to compress your media to a smaller file with less quality or select High quality to compress to a larger file with higher quality.</string>
<string name="media_compression_quality_explainer">Select Low quality to compress your media to a smaller file with less quality, High quality to compress to a larger file with higher quality or Uncompressed to upload the media without compression.</string>
<string name="media_compression_quality_low">Low</string>
<string name="media_compression_quality_medium">Medium</string>
<string name="media_compression_quality_high">High</string>
<string name="media_compression_quality_uncompressed">Uncompressed</string>
<string name="edit_draft">Edit draft</string>