From 2809d6fc2f197fcaf60d96f111baf53dfa4567b9 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 20 Jun 2023 14:55:26 +0200 Subject: [PATCH] Improve FileSizeFormatter.format API. --- .../androidtools/api/FileSizeFormatter.kt | 2 +- .../impl/AndroidFileSizeFormatter.kt | 23 +++++++++++++++++-- .../test/FakeFileSizeFormatter.kt | 2 +- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/libraries/androidtools/api/src/main/kotlin/io/element/android/libraries/androidtools/api/FileSizeFormatter.kt b/libraries/androidtools/api/src/main/kotlin/io/element/android/libraries/androidtools/api/FileSizeFormatter.kt index 6c67d9a588..261b7cbecc 100644 --- a/libraries/androidtools/api/src/main/kotlin/io/element/android/libraries/androidtools/api/FileSizeFormatter.kt +++ b/libraries/androidtools/api/src/main/kotlin/io/element/android/libraries/androidtools/api/FileSizeFormatter.kt @@ -20,5 +20,5 @@ interface FileSizeFormatter { /** * Formats a content size to be in the form of bytes, kilobytes, megabytes, etc. */ - fun format(fileSize: Long): String + fun format(fileSize: Long, useShortFormat: Boolean = true): String } diff --git a/libraries/androidtools/impl/src/main/kotlin/io/element/android/libraries/androidtools/impl/AndroidFileSizeFormatter.kt b/libraries/androidtools/impl/src/main/kotlin/io/element/android/libraries/androidtools/impl/AndroidFileSizeFormatter.kt index 5a57c1d904..fe156f1635 100644 --- a/libraries/androidtools/impl/src/main/kotlin/io/element/android/libraries/androidtools/impl/AndroidFileSizeFormatter.kt +++ b/libraries/androidtools/impl/src/main/kotlin/io/element/android/libraries/androidtools/impl/AndroidFileSizeFormatter.kt @@ -17,6 +17,7 @@ package io.element.android.libraries.androidtools.impl import android.content.Context +import android.os.Build import android.text.format.Formatter import com.squareup.anvil.annotations.ContributesBinding import io.element.android.libraries.androidtools.api.FileSizeFormatter @@ -26,7 +27,25 @@ import javax.inject.Inject @ContributesBinding(AppScope::class) class AndroidFileSizeFormatter @Inject constructor(@ApplicationContext private val context: Context) : FileSizeFormatter { - override fun format(fileSize: Long): String { - return Formatter.formatShortFileSize(context, fileSize) + override fun format(fileSize: Long, useShortFormat: Boolean): String { + // Since Android O, the system considers that 1ko = 1000 bytes instead of 1024 bytes. + // We want to avoid that. + val normalizedSize = if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.N) { + fileSize + } else { + // First convert the size + when { + fileSize < 1024 -> fileSize + fileSize < 1024 * 1024 -> fileSize * 1000 / 1024 + fileSize < 1024 * 1024 * 1024 -> fileSize * 1000 / 1024 * 1000 / 1024 + else -> fileSize * 1000 / 1024 * 1000 / 1024 * 1000 / 1024 + } + } + + return if (useShortFormat) { + Formatter.formatShortFileSize(context, normalizedSize) + } else { + Formatter.formatFileSize(context, normalizedSize) + } } } diff --git a/libraries/androidtools/test/src/main/kotlin/io/element/android/libraries/androidtools/test/FakeFileSizeFormatter.kt b/libraries/androidtools/test/src/main/kotlin/io/element/android/libraries/androidtools/test/FakeFileSizeFormatter.kt index d316510ec8..183a78eaf1 100644 --- a/libraries/androidtools/test/src/main/kotlin/io/element/android/libraries/androidtools/test/FakeFileSizeFormatter.kt +++ b/libraries/androidtools/test/src/main/kotlin/io/element/android/libraries/androidtools/test/FakeFileSizeFormatter.kt @@ -19,7 +19,7 @@ package io.element.android.libraries.androidtools.test import io.element.android.libraries.androidtools.api.FileSizeFormatter class FakeFileSizeFormatter : FileSizeFormatter { - override fun format(fileSize: Long): String { + override fun format(fileSize: Long, useShortFormat: Boolean): String { return "$fileSize Bytes" } }