diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
index 0ffe8f60..832eee81 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/ComposeActivity.kt
@@ -103,6 +103,7 @@ import kotlinx.coroutines.launch
import kotlinx.parcelize.Parcelize
import java.io.File
import java.io.IOException
+import java.text.DecimalFormat
import java.util.Locale
import javax.inject.Inject
import kotlin.math.max
@@ -952,13 +953,17 @@ class ComposeActivity :
private fun pickMedia(uri: Uri) {
lifecycleScope.launch {
viewModel.pickMedia(uri).onFailure { throwable ->
- val errorId = when (throwable) {
- is VideoSizeException -> R.string.error_video_upload_size
- is AudioSizeException -> R.string.error_audio_upload_size
- is VideoOrImageException -> R.string.error_media_upload_image_or_video
- else -> R.string.error_media_upload_opening
+ val errorString = when (throwable) {
+ is FileSizeException -> {
+ val decimalFormat = DecimalFormat("0.##")
+ val allowedSizeInMb = throwable.allowedSizeInBytes.toDouble() / (1024 * 1024)
+ val formattedSize = decimalFormat.format(allowedSizeInMb)
+ getString(R.string.error_multimedia_size_limit, formattedSize)
+ }
+ is VideoOrImageException -> getString(R.string.error_media_upload_image_or_video)
+ else -> getString(R.string.error_media_upload_opening)
}
- displayTransientError(errorId)
+ displayTransientError(errorString)
}
}
}
diff --git a/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt b/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt
index 221b306e..d7769cbd 100644
--- a/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt
+++ b/app/src/main/java/com/keylesspalace/tusky/components/compose/MediaUploader.kt
@@ -71,8 +71,7 @@ fun createNewImageFile(context: Context, suffix: String = ".jpg"): File {
data class PreparedMedia(val type: QueuedMedia.Type, val uri: Uri, val size: Long)
-class AudioSizeException : Exception()
-class VideoSizeException : Exception()
+class FileSizeException(val allowedSizeInBytes: Int) : Exception()
class MediaTypeException : Exception()
class CouldNotOpenFileException : Exception()
class UploadServerError(val errorMessage: String) : Exception()
@@ -166,7 +165,7 @@ class MediaUploader @Inject constructor(
return when (mimeType.substring(0, mimeType.indexOf('/'))) {
"video" -> {
if (mediaSize > instanceInfo.videoSizeLimit) {
- throw VideoSizeException()
+ throw FileSizeException(instanceInfo.videoSizeLimit)
}
PreparedMedia(QueuedMedia.Type.VIDEO, uri, mediaSize)
}
@@ -175,7 +174,7 @@ class MediaUploader @Inject constructor(
}
"audio" -> {
if (mediaSize > instanceInfo.videoSizeLimit) {
- throw AudioSizeException()
+ throw FileSizeException(instanceInfo.videoSizeLimit)
}
PreparedMedia(QueuedMedia.Type.AUDIO, uri, mediaSize)
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 1a7ef298..7c163d18 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -12,9 +12,8 @@
Failed loading account details
Could not load the login page.
The post is too long!
- The file must be less than 8MB.
- Video files must be less than 40MB.
- Audio files must be less than 40MB.
+ Video and audio files cannot exceed %s MB in size.
+
The image could not be edited.
That type of file cannot be uploaded.
That file could not be opened.