11package com.simplemobiletools.filepicker.models
22
3+ import android.content.Context
34import android.graphics.Bitmap
45import android.graphics.BitmapFactory
6+ import android.media.MediaMetadataRetriever
7+ import android.net.Uri
8+ import java.io.File
9+ import java.util.*
510
611class 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