[Android] Prefer Formatter.formatFileSize over our custom implementation

Nicolas Pomepuy git at videolan.org
Mon Jun 27 11:45:16 UTC 2022


vlc-android | branch: master | Nicolas Pomepuy <nicolas at videolabs.io> | Mon Jun 27 08:11:38 2022 +0200| [a1c8f6902544ec9469cbb132c740abe2aba4a8f0] | committer: Duncan McNamara

Prefer Formatter.formatFileSize over our custom implementation

It's localized and Talkback compatible

> https://code.videolan.org/videolan/vlc-android/commit/a1c8f6902544ec9469cbb132c740abe2aba4a8f0
---

 .../tools/src/main/java/org/videolan/tools/Strings.kt        |  8 --------
 .../vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt     | 12 ++++++------
 .../src/org/videolan/vlc/gui/SendCrashActivity.kt            |  4 ++--
 .../src/org/videolan/vlc/providers/BrowserProvider.kt        |  8 ++++++--
 4 files changed, 14 insertions(+), 18 deletions(-)

diff --git a/application/tools/src/main/java/org/videolan/tools/Strings.kt b/application/tools/src/main/java/org/videolan/tools/Strings.kt
index 7bcfdaf92..aacb0c9a9 100644
--- a/application/tools/src/main/java/org/videolan/tools/Strings.kt
+++ b/application/tools/src/main/java/org/videolan/tools/Strings.kt
@@ -67,14 +67,6 @@ fun containsName(list: List<String>, text: String) = list.indexOfLast { it.endsW
  */
 fun Float.formatRateString() = String.format(java.util.Locale.US, "%.2fx", this)
 
-fun Long.readableFileSize(): String {
-    val size: Long = this
-    if (size <= 0) return "0"
-    val units = arrayOf("B", "KiB", "MiB", "GiB", "TiB")
-    val digitGroups = (log10(size.toDouble()) / log10(1024.0)).toInt()
-    return DecimalFormat("#,##0.#").format(size / (1024.0).pow(digitGroups.toDouble())) + " " + units[digitGroups]
-}
-
 fun Long.readableSize(): String {
     val size: Long = this
     if (size <= 0) return "0"
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
index e5c5f1745..e331150f6 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/InfoActivity.kt
@@ -6,6 +6,7 @@ import android.graphics.drawable.BitmapDrawable
 import android.net.Uri
 import android.os.Bundle
 import android.os.Parcelable
+import android.text.format.Formatter
 import android.view.Gravity
 import android.view.View
 import androidx.constraintlayout.widget.ConstraintLayout
@@ -38,7 +39,6 @@ import org.videolan.medialibrary.media.MediaLibraryItem
 import org.videolan.resources.TAG_ITEM
 import org.videolan.resources.VLCInstance
 import org.videolan.tools.dp
-import org.videolan.tools.readableFileSize
 import org.videolan.vlc.R
 import org.videolan.vlc.databinding.InfoActivityBinding
 import org.videolan.vlc.gui.browser.PathAdapter
@@ -110,8 +110,8 @@ class InfoActivity : AudioPlayerContainerActivity(), View.OnClickListener, PathA
         model.hasSubs.observe(this) { if (it) binding.infoSubtitles.visibility = View.VISIBLE }
         model.mediaTracks.observe(this) { adapter.setTracks(it) }
         model.sizeText.observe(this) {
-            binding.fileSizeViews.visibility = if (it.isNotBlank()) View.VISIBLE else View.GONE
-            binding.sizeValueText = it
+            binding.fileSizeViews.visibility = if (it != -1L) View.VISIBLE else View.GONE
+            binding.sizeValueText = Formatter.formatFileSize(this, it)
         }
         model.cover.observe(this) {
             if (it != null) {
@@ -243,7 +243,7 @@ class InfoModel : ViewModel() {
 
     val hasSubs = MutableLiveData<Boolean>()
     val mediaTracks = MutableLiveData<List<IMedia.Track>>()
-    val sizeText = MutableLiveData<String>()
+    val sizeText = MutableLiveData<Long>()
     val cover = MutableLiveData<Bitmap>()
     private val mediaFactory = FactoryManager.getFactory(IMediaFactory.factoryId) as IMediaFactory
 
@@ -281,11 +281,11 @@ class InfoModel : ViewModel() {
         val itemFile = withContext(Dispatchers.IO) { File(Uri.decode(mw.location.substring(5))) }
 
         if (!withContext(Dispatchers.IO) { itemFile.exists() } || !isActive) {
-            sizeText.value = ""
+            sizeText.value = -1L
             return at launch
         }
         if (mw.type == MediaWrapper.TYPE_VIDEO) checkSubtitles(itemFile)
-        sizeText.value = itemFile.length().readableFileSize()
+        sizeText.value = itemFile.length()
     }
 
     private suspend fun checkSubtitles(itemFile: File) = withContext(Dispatchers.IO) {
diff --git a/application/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt b/application/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
index ede210367..66d489b72 100644
--- a/application/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
+++ b/application/vlc-android/src/org/videolan/vlc/gui/SendCrashActivity.kt
@@ -30,6 +30,7 @@ import android.net.Uri
 import android.os.Build
 import android.os.Bundle
 import android.text.format.DateFormat
+import android.text.format.Formatter
 import android.util.Log
 import android.view.View
 import androidx.appcompat.app.AppCompatActivity
@@ -46,7 +47,6 @@ import org.videolan.resources.AppContextProvider
 import org.videolan.resources.CRASH_ML_CTX
 import org.videolan.resources.CRASH_ML_MSG
 import org.videolan.tools.AppUtils
-import org.videolan.tools.readableFileSize
 import org.videolan.vlc.BuildConfig
 import org.videolan.vlc.DebugLogService
 import org.videolan.vlc.R
@@ -138,7 +138,7 @@ class SendCrashActivity : AppCompatActivity(), DebugLogService.Client.Callback {
                 appData.append("Device model: ${Build.MANUFACTURER} ${Build.MODEL}<br/>")
                 appData.append("Android version: ${Build.VERSION.SDK_INT}<br/>")
                 appData.append("System name: ${Build.DISPLAY}<br/>")
-                appData.append("Memory free: ${AppUtils.freeMemory().readableFileSize()} on ${AppUtils.totalMemory().readableFileSize()}")
+                appData.append("Memory free: ${Formatter.formatFileSize(this at SendCrashActivity, AppUtils.freeMemory())} on ${Formatter.formatFileSize(this at SendCrashActivity, AppUtils.totalMemory())}")
 
                 attachments.add(FileProvider.getUriForFile(this at SendCrashActivity, applicationContext.packageName + ".provider", File(logcatZipPath)))
                 emailIntent.putExtra(Intent.EXTRA_STREAM, attachments)
diff --git a/application/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt b/application/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
index f3ed160d0..8d8f29a63 100644
--- a/application/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
+++ b/application/vlc-android/src/org/videolan/vlc/providers/BrowserProvider.kt
@@ -24,6 +24,7 @@ import android.content.Context
 import android.os.Handler
 import android.os.HandlerThread
 import android.os.Process
+import android.text.format.Formatter
 import androidx.collection.SimpleArrayMap
 import androidx.lifecycle.MutableLiveData
 import kotlinx.coroutines.*
@@ -45,7 +46,10 @@ import org.videolan.medialibrary.media.MediaLibraryItem
 import org.videolan.medialibrary.media.Storage
 import org.videolan.resources.VLCInstance
 import org.videolan.resources.util.HeaderProvider
-import org.videolan.tools.*
+import org.videolan.tools.AppScope
+import org.videolan.tools.CoroutineContextProvider
+import org.videolan.tools.DependencyProvider
+import org.videolan.tools.Settings
 import org.videolan.tools.livedata.LiveDataset
 import org.videolan.vlc.R
 import org.videolan.vlc.util.*
@@ -266,7 +270,7 @@ abstract class BrowserProvider(val context: Context, val dataset: LiveDataset<Me
                                 if (mw.length == 0L) {
                                     parseMediaSize(mw)?.let {
                                         withContext(coroutineContextProvider.Main) {
-                                            item.description = if (it == 0L) "" else it.readableFileSize()
+                                            item.description = if (it == 0L) "" else Formatter.formatFileSize(context, it)
                                             descriptionUpdate.value = Pair(currentParsedPosition, item.description)
                                         }
                                     }



More information about the Android mailing list