Skip to content

Commit 6aaca00

Browse files
committed
add a couple more helper functions about files
1 parent 61dee85 commit 6aaca00

File tree

2 files changed

+51
-0
lines changed

2 files changed

+51
-0
lines changed

app/src/main/kotlin/com/simplemobiletools/filemanager/dialogs/PropertiesDialog.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ class PropertiesDialog : DialogFragment() {
4444
properties_resolution_label.visibility = View.VISIBLE
4545
properties_resolution.visibility = View.VISIBLE
4646
properties_resolution.text = mItem.resolution
47+
} else if (mItem.isAudio(context)) {
48+
49+
} else if (mItem.isVideo(context)) {
50+
4751
}
4852

4953
val file = File(mItem.path)

library/src/main/kotlin/com/simplemobiletools/filepicker/models/FileDirItem.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
package com.simplemobiletools.filepicker.models
22

3+
import android.content.Context
34
import android.graphics.Bitmap
45
import android.graphics.BitmapFactory
6+
import android.media.MediaMetadataRetriever
7+
import android.net.Uri
8+
import java.io.File
9+
import java.util.*
510

611
class FileDirItem(val path: String, val name: String, val isDirectory: Boolean, val children: Int, val size: Long) :
712
Comparable<FileDirItem> {
@@ -27,6 +32,33 @@ class FileDirItem(val path: String, val name: String, val isDirectory: Boolean,
2732
return options.outWidth != -1 && options.outHeight != -1
2833
}
2934

35+
fun isVideo(context: Context): Boolean {
36+
return getMimeType(context).startsWith("video")
37+
}
38+
39+
fun isAudio(context: Context): Boolean {
40+
return getMimeType(context).startsWith("audio")
41+
}
42+
43+
fun getMimeType(context: Context): String {
44+
try {
45+
val retriever = MediaMetadataRetriever()
46+
retriever.setDataSource(context, Uri.fromFile(File(path)))
47+
return retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_MIMETYPE)
48+
} catch (ignored: Exception) {
49+
50+
}
51+
return ""
52+
}
53+
54+
fun getDuration(context: Context): String {
55+
val retriever = MediaMetadataRetriever()
56+
retriever.setDataSource(context, Uri.fromFile(File(path)))
57+
val time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
58+
val timeInMillisec = java.lang.Long.parseLong(time)
59+
return getFormattedDuration((timeInMillisec / 1000).toInt())
60+
}
61+
3062
val resolution: String
3163
get () {
3264
val bitmap: Bitmap? = BitmapFactory.decodeFile(path)
@@ -35,4 +67,19 @@ class FileDirItem(val path: String, val name: String, val isDirectory: Boolean,
3567

3668
return "${bitmap.width} x ${bitmap.height}"
3769
}
70+
71+
private fun getFormattedDuration(duration: Int): String {
72+
val sb = StringBuilder(8)
73+
val hours = duration / (60 * 60)
74+
val minutes = duration % (60 * 60) / 60
75+
val seconds = duration % (60 * 60) % 60
76+
77+
if (duration > 3600) {
78+
sb.append(String.format(Locale.getDefault(), "%02d", hours)).append(":")
79+
}
80+
81+
sb.append(String.format(Locale.getDefault(), "%02d", minutes))
82+
sb.append(":").append(String.format(Locale.getDefault(), "%02d", seconds))
83+
return sb.toString()
84+
}
3885
}

0 commit comments

Comments
 (0)