AIRA-android/app/src/main/java/sushi/hardcore/aira/utils/FileUtils.kt

52 lines
2.1 KiB
Kotlin

package sushi.hardcore.aira.utils
import android.content.ContentValues
import android.content.Context
import android.os.Environment
import android.provider.MediaStore
import android.webkit.MimeTypeMap
import java.io.File
import java.io.OutputStream
import java.text.DecimalFormat
import java.text.SimpleDateFormat
import java.util.*
import kotlin.math.pow
import kotlin.math.log10
object FileUtils {
private val units = arrayOf("B", "kB", "MB", "GB", "TB")
fun formatSize(size: Long): String {
if (size <= 0) {
return "0 B"
}
val digitGroups = (log10(size.toDouble()) / log10(1000.0)).toInt()
return DecimalFormat("#,##0.#").format(size / 1000.0.pow(digitGroups.toDouble())
) + " " + units[digitGroups]
}
fun openFileForDownload(context: Context, fileName: String): OutputStream? {
val fileExtension = fileName.substringAfterLast(".")
val dateExtension = SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()).format(Date())
val datedFilename = if (fileName.contains(".")) {
val basename = fileName.substringBeforeLast(".")
"""${basename}_$dateExtension.$fileExtension"""
} else {
fileName + "_" + dateExtension
}
return if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.Q) {
context.contentResolver.insert(
MediaStore.Downloads.EXTERNAL_CONTENT_URI,
ContentValues().apply {
put(MediaStore.Images.Media.TITLE, datedFilename)
put(MediaStore.Images.Media.DISPLAY_NAME, datedFilename)
put(MediaStore.Images.Media.MIME_TYPE, MimeTypeMap.getSingleton().getMimeTypeFromExtension(fileExtension))
}
)?.let {
context.contentResolver.openOutputStream(it)
}
} else {
@Suppress("Deprecation")
File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), File(datedFilename).name).outputStream()
}
}
}